模板化类的模板化成员方法可以在类定义之外定义吗

Posted

技术标签:

【中文标题】模板化类的模板化成员方法可以在类定义之外定义吗【英文标题】:Can a templated member method of a templated class be defined ouside the class definition 【发布时间】:2013-01-15 15:03:02 【问题描述】:

我一直在努力确保自己理解 C++ 模板的语法,并且我想我要解决最后一种情况了。如果我有一个模板类,它有一个模板方法(与类的模板参数无关)作为成员,我可以在类定义之外定义该方法吗?如果有,语法是什么?

如果模板化方法是在模板化类定义中定义的,那么一切都很好。但是为了在类外定义方法,我尝试了很多关键字和尖括号的组合,但总是遇到编译器错误(Visual Studio 2012)。

这是问题,归结为:

template <typename T>
class TestClass

    public:
        // ctor
        TestClass(T classtype) m_classtype = classtype;

        // The declaration/definition below is fine.
        template <typename U> void MethodOk(U param) printf("Classtype size: %d.  Method parameter size: %d\n", sizeof(m_classtype), sizeof(param));

        // The declaration below is fine, but how do I define the method?
        template <typename U> void MethodProblem(U param); // What is the syntax for defining this outside the class definition?

    private:
        T m_classtype;
;

【问题讨论】:

【参考方案1】:
template<typename T>
template<typename U>
void TestClass<T>::MethodProblem(U param)

    //...

【讨论】:

【参考方案2】:

将其视为嵌套模板:

template <typename T>
template <typename U>
void TestClass<T>::MethodProblem(U param)


【讨论】:

以上是关于模板化类的模板化成员方法可以在类定义之外定义吗的主要内容,如果未能解决你的问题,请参考以下文章

如何在模板化类的私有部分中创建模板化结构

我可以在类之外定义私有模板函数吗?

为啥我不能从 gcc 中的前身模板化成员函数访问祖先方法?

std::async 与共享指针模板化成员函数

如何在模板类之外定义构造函数[重复]

模板实现顺序表