【发布时间】:2014-07-01 07:45:52
【问题描述】:
在下面的类模板中,我们可以将成员 Foo::Bar() 特化为某种类型,比如 T = int:
template <typename T>
class Foo
{
public:
void Bar()
{
std::cout << "generic Bar()" << std::endl;
}
};
template<>
void Foo<int>::Bar()
{
std::cout << "specialized Bar()" << std::endl;
}
int main()
{
Foo<char> generic_foo;
Foo<int> specialized_foo;
generic_foo.Bar();
specialized_foo.Bar();
return 0;
}
如果类 Foo 有多个模板参数,我们如何做同样的事情:
template <typename T, int N>
class Foo
{
public:
void Bar()
{
std::cout << "generic Bar()" << std::endl;
}
};
// How can we specialize Foo::Bar() for T = int?
int main()
{
Foo<char, 0> generic_foo;
Foo<int, 0> specialized_foo;
generic_foo.Bar();
specialized_foo.Bar();
return 0;
}
我尝试了几种替代方法来将Foo::Bar() 专门用于T = int,包括:
template<int N>
void Foo<int, N>::Bar()
{
std::cout << "specialized Bar()" << std::endl;
}
但编译器全部拒绝。
【问题讨论】: