2010-08-13 136 views
7

模板的模板规范是这样的:模板模板总专业化

template < template <class> class T > 
struct MyTemplate 
{ 
}; 

我应该如何创建一个总(或部分)专门针对此模板? 这可能吗?

+1

...某处精彩!我等不及了! – 2010-08-13 16:46:34

+0

谁在世界投票结束,为什么?这似乎是一个完全合法的,热门的问题。 – 2010-08-13 16:51:23

+0

@Jerry:如果你看到问题的前30秒(投票的地方),这是有道理的。这只是代码直到'{'毫无疑问。我发表了评论:“'}; //你在哪里用这个?'”约翰回答说。但现在已经修复了。 :) – GManNickG 2010-08-13 16:54:31

回答

5

像这样:

#include <iostream> 

template <typename T> 
struct foo{}; 

template <typename T> 
struct bar{}; 

template < template <class> class T > 
struct MyTemplate 
{ 
    static const bool value = false; 
}; 

template <> 
struct MyTemplate<bar> 
{ 
    static const bool value = true; 
}; 


int main(void) 
{ 
    std::cout << std::boolalpha; 
    std::cout << MyTemplate<foo>::value << std::endl; 
    std::cout << MyTemplate<bar>::value << std::endl; 
} 
+0

GMan,有一种强制MyTemplate专业化的方法T吧应该期待什么? – scooterman 2010-08-13 17:02:35

+0

@scooterman:那么在你的课堂上,你只需要使用'bar ',它会起作用或不起作用。如果我正确理解你的问题。 – GManNickG 2010-08-13 17:35:03

3

这方面的一个专业化会,例如是:

template<> 
struct MyTemplate<std::auto_ptr> { 
    // ... 
};