假设我有一个模板类
template <typename T> struct Node
{
// general method split
void split()
{
// ... actual code here (not empty)
}
};
需要在 Triangle 类的情况下专门化这个......类似
Need to specialise this in the Triangle class case.. something like
template <>
struct Node <Triangle*>
{
// specialise the split method
void split() {}
} ;
但我不想想重新重写整个模板!唯一需要更改的是 split() 方法,仅此而已.
but I don't want to rewrite the entire template over again! The only thing that needs to change is the split() method, nothing more.
您可以在类声明之外仅为该函数提供专门化.
You can provide a specialization for only that function outside the class declaration.
template <typename T> struct Node
{
// general method split
void split()
{
// implementation here or somewhere else in header
}
};
//cpp中声明的函数原型void splitIntNode( Node & node );
// prototype of function declared in cpp void splitIntNode( Node & node );
template <>
void Node<int>::split()
{
splitIntNode( this ); // which can be implemented
}
int main(int argc, char* argv[])
{
Node <char> x;
x.split(); //will call original method
Node <int> k;
k.split(); //will call the method for the int version
}
如果 splitIntNode 需要访问私有成员,您可以将这些成员传递给函数而不是整个节点.
If splitIntNode needs access to private members, you can just pass those members into the function rather than the whole Node.
这篇关于如果我只想在模板中专门化一种方法,我该怎么做?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!
为什么两个函数的地址相同?Why do two functions have the same address?(为什么两个函数的地址相同?)
为什么 std::function 的初始化程序必须是可复制构Why the initializer of std::function has to be CopyConstructible?(为什么 std::function 的初始化程序必须是可复制构造的?)
混合模板与多态性mixing templates with polymorphism(混合模板与多态性)
我什么时候应该使用关键字“typename"?使用模When should I use the keyword quot;typenamequot; when using templates(我什么时候应该使用关键字“typename?使用模板时)
依赖名称解析命名空间 std/标准库Dependent name resolution amp; namespace std / Standard Library(依赖名称解析命名空间 std/标准库)
gcc 可以编译可变参数模板,而 clang 不能gcc can compile a variadic template while clang cannot(gcc 可以编译可变参数模板,而 clang 不能)