在以下课程模板中,我们可以针对特定类型对成员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;
}
但是编译器拒绝了所有这些。
答案 0 :(得分:5)
模板功能没有部分专业化。你应该专攻class
。
template<int N>
class Foo<int, N>
{
public:
void Bar()
{
std::cout << "specialized Bar()" << std::endl;
}
};