c++ - TT : Is that possible/correct 上的模板化类中 T 上的模板化方法

标签 c++ class templates methods

我有一个以类型名 T 为模板的类 MyClass。但在内部,我想要一个以另一种类型 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.
}

我知道我必须“声明”方法中使用的类型名称,但不知 Prop 体如何,并通过反复试验找到了。

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

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

最佳答案

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

任何类型的代码背后都有问题/惊喜/约束。

您最终可能会遇到此代码的主要问题是您无法使模板化函数成为虚拟的,因此如果您想在类级别为您的模板化函数获得多态性,您可以使用外部函数。

关于c++ - TT : Is that possible/correct 上的模板化类中 T 上的模板化方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2729527/

相关文章:

类中的 C++ 类参数与传递给类的参数不同

javascript - ES6 类 : what about instrospection?

r - 在R中创建包时链接多个文件

c++ - 将返回值转换为模板类型

c++ - 转发元组的一个元素

c++ - 如何使控制台程序没有控制台窗口

c++ - 在 C++ 中定义虚拟 get 和 set 函数被认为是一种好的做法吗?

forms - 使用 Symfony2 在 Twig 模板中渲染表单

c++ - 无法将 unique_ptr<Basic> 设置为 p(new Basic())

multithreading - 多线程应用程序中的 DLL 和类