c – TT上模板化类中T的模板化方法:这是可能的/正确的

我有一个MyClass类,它是在typename T上模板化的.但是在内部,我想要一个在另一个类型TT上模板化的方法(与T无关).

阅读/修补后,我发现了以下符号:

template <typename T>
class MyClass
{
   public :
      template<typename TT>
      void MyMethod(const TT & param) ;
} ;

由于风格原因(我喜欢在一个文件中使用模板化类声明,另一个文件中有方法定义),我不会在类声明中定义方法.所以,我必须把它写成:

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.
}

我知道我必须“声明”该方法中使用的类型名称,但不知道具体如何,并通过试验和错误找到.

上面的代码在Visual C 2008上编译,但是:这是在T上模板化的类中使用模板化方法的正确方法吗?

作为奖励:这种代码背后是否存在隐藏的问题/意外/限制? (我想专业化写作可能很有趣)

解决方法

这确实是做你想做的事情的正确方法,它将适用于每个体面的C编译器.我在gcc4.4和最新的clang版本上测试了它.

任何类型的代码背后都存在问题/意外/限制.

使用此代码最终可能遇到的主要问题是您无法将模板化函数设置为虚拟,因此如果您希望在模板级别为模板化函数获取多态性,则不会使用外部函数实现它.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...