use*_*866 2 c++ templates c++11
在下面的类模板中,我们可以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;
}
Run Code Online (Sandbox Code Playgroud)
如果类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;
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试了几种替代品来专门Foo::Bar()用于T= int,包括:
template<int N>
void Foo<int, N>::Bar()
{
std::cout << "specialized Bar()" << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
但是编译器拒绝了所有这些.
模板函数没有部分特化.你应该专攻class.
template<int N>
class Foo<int, N>
{
public:
void Bar()
{
std::cout << "specialized Bar()" << std::endl;
}
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
54 次 |
| 最近记录: |