阅读/修补后,我发现了以下符号:
template <typename T>class MyClass{ public : template<typename TT> voID MyMethod(const TT & param) ;} ;
由于风格原因(我喜欢在一个头文件中使用模板化类声明,另一个头文件中有方法定义),我不会在类声明中定义方法.所以,我必须把它写成:
template <typename T> // this is the type of the classtemplate <typename TT> // this is the type of the methodvoID MyClass<T>::MyMethod(const TT & param){ // etc.}
我知道我必须“声明”该方法中使用的类型名称,但不知道具体如何,并通过试验和错误找到.
上面的代码在Visual C 2008上编译,但是:这是在T上模板化的类中使用模板化方法的正确方法吗?
作为奖励:这种代码背后是否存在隐藏的问题/意外/限制? (我想专业化写作可能很有趣)
解决方法 这确实是做你想做的事情的正确方法,它将适用于每个体面的C编译器.我在gcc4.4和最新的clang版本上测试了它.任何类型的代码背后都存在问题/意外/限制.
使用此代码最终可能遇到的主要问题是您无法将模板化函数设置为虚拟,因此如果您希望在模板级别为模板化函数获取多态性,则不会使用外部函数实现它.
总结以上是内存溢出为你收集整理的c – TT上模板化类中T的模板化方法:这是可能的/正确的全部内容,希望文章能够帮你解决c – TT上模板化类中T的模板化方法:这是可能的/正确的所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)