模板类成员函数只有特化

Ton*_*ion 29 c++ templates specialization

我正在阅读模板完整指南,它说如下:

它在哪里谈论类模板专业化.

但是,如果您专门化类模板,则还必须专门化所有成员函数.虽然可以专门化单个成员函数,但是一旦完成,就不能再专门化整个类了.

我实际上想知道这是怎么回事,因为你可以专门没有任何成员函数.它是说你不能只有一个成员函数的专业化,然后是另一个具有所有成员函数的专业化吗?

有人可以澄清一下吗?

Dav*_*eas 31

我认为这是指以下情况:

template <typename T>
struct base {
   void foo() { std::cout << "generic" << std::endl; }
   void bar() { std::cout << "bar" << std::endl; }
};
template <>
void base<int>::foo() // specialize only one member
{ 
   std::cout << "int" << std::endl; 
}
int main() {
   base<int> i;
   i.foo();         // int
   i.bar();         // bar
}
Run Code Online (Sandbox Code Playgroud)

完成后,您无法将完整模板专门化为其他任何东西,所以

template <>
struct base<int> {};  // error
Run Code Online (Sandbox Code Playgroud)

  • @Tony - 是的,但你当然可以为另一种类型提供另一种特殊化,比如`base <float>`. (8认同)