模板类成员函数只有特化

时间:2011-05-10 12:26:49

标签: c++ templates specialization

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

它在谈论类模板专业化。

  

但是,如果你专攻一个班级   模板,你还必须专注于所有   成员职能。虽然是   可以专门化一个成员   功能,一旦你这样做了,你   再也不能专注于整体   类。

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

有人可以澄清一下吗?

2 个答案:

答案 0 :(得分: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
}

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

template <>
struct base<int> {};  // error

答案 1 :(得分:0)

我认为你的意思是:

  • 专门化整个类,所有成员(数据和函数,静态与否,虚拟与否)都必须声明和定义,即使它们与非专业版本相同,

    < / LI>
  • 专门化一些函数成员,但是你不能专门化整个类(即所有成员的声明方式与非特殊情况相同,你只需为某些函数成员提供实现)。 / p>