use*_*536 8 c++ templates template-specialization
以下代码:
using namespace std;
template <typename X>
class Goo {};
template <typename X>
class Hoo {};
template <class A, template <typename> class B = Goo >
struct Foo {
B<A> data;
void foo1();
void foo2();
};
template <typename A>
void Foo<A>::foo1() { cout << "foo1 for Goo" << endl;}
int main() {
Foo<int> a;
a.foo1();
}
Run Code Online (Sandbox Code Playgroud)
给我一个编译器错误:
test.cc:18: error: invalid use of incomplete type 'struct Foo<A, Goo>'
test.cc:11: error: declaration of 'struct Foo<A, Goo>'
Run Code Online (Sandbox Code Playgroud)
为什么我不能部分专门化foo1()?如果不是这样,我该怎么做?
我有另一个问题:如果我只想为A = int,B = Hoo定义foo2()而不是任何其他组合,我该怎么做?
功能模板可能仅是完全专用的,而不是部分专用的。
类模板的成员函数是自动的函数模板,它们的确可以是专门的,但只能完全:
template <>
void Foo<int, Goo>::foo1() { } // OK
Run Code Online (Sandbox Code Playgroud)
您可以对整个类进行部分专门化,然后重新定义:
template <typename A>
struct Foo<A, Goo>
{
// ...
};
Run Code Online (Sandbox Code Playgroud)
(有关详细信息,请参见14.7.3。)
| 归档时间: |
|
| 查看次数: |
3305 次 |
| 最近记录: |