pae*_*bal 7 c++ methods templates class
我有一个MyClass类,它是在typename T上模板化的.但是在内部,我想要一个在另一个类型TT上模板化的方法(与T无关).
阅读/修补后,我发现了以下符号:
template <typename T>
class MyClass
{
public :
template<typename TT>
void MyMethod(const TT & param) ;
} ;
Run Code Online (Sandbox Code Playgroud)
由于风格原因(我喜欢在一个头文件中使用模板化类声明,以及另一个头文件中的方法定义),我不会在类声明中定义方法.所以,我必须把它写成:
template <typename T> // this is the type of the class
template <typename TT> // this is the type of the method
void MyClass<T>::MyMethod(const TT & param)
{
// etc.
}
Run Code Online (Sandbox Code Playgroud)
我知道我必须"声明"方法中使用的类型名称,但不知道究竟是多少,并通过试验和错误找到.
上面的代码在Visual C++ 2008上编译,但是:这是在T上模板化的类中使用模板化方法的正确方法吗?
作为奖励:这种代码背后是否存在隐藏的问题/意外/限制?(我想专业化写作可能很有趣)
这确实是做你想做的事情的正确方法,并且它适用于每个像样的 C++ 编译器。我在 gcc4.4 和最新的 clang 版本上测试了它。
任何类型的代码背后都存在问题/惊喜/限制。
这段代码最终可能遇到的主要问题是,您无法将模板化函数设为虚拟,因此,如果您想在模板化函数的类级别获得多态性,则需要使用外部函数来实现它。