我正在阅读模板完整指南,并说明如下:
它在谈论类模板专业化。
但是,如果你专攻一个班级 模板,你还必须专注于所有 成员职能。虽然是 可以专门化一个成员 功能,一旦你这样做了,你 再也不能专注于整体 类。
我实际上想知道这是怎么回事,因为你可以在没有任何成员函数的情况下专攻。它是说你不能只有一个成员函数的专业化,然后是另一个具有所有成员函数的专业化吗?
有人可以澄清一下吗?
答案 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>