模板类中的模板函数

157
我有这段代码:
template <class T>
class MyClass {
public:
    template <class U>
    void foo() {
        U a;
        a.invoke();
    }
};

我想要以这种形式:

template <class T>
class MyClass {
public:
    template <class U>
    void foo();
};

template <class T> /* ????? */
void MyClass<T>::foo() {
    U a;
    a.invoke();
}

我该怎么做?正确的语法是什么?


为什么不在类声明内部进行函数声明(请参见http://codepad.org/wxaZOMYW)?无论如何,您都无法将函数声明移出头文件。 - hiobs
@hiobs:顺便说一下,你可以将声明移动到CPP文件中。话虽如此,我只做过一次这样的hackery。在那种情况下,知道如何做这件事是必不可少的。 - Thomas Eding
有时候,我们需要将函数定义移到类的外部,在函数体所需的依赖项定义之后。这种情况通常发生在A类使用B类,而B类也使用A类的情况下。在这种情况下,您需要先声明A和B,然后再定义A和B的方法。 - Wheezil
1个回答

237

写下这个:

template <class T>
template <class U>
void MyClass<T>::foo() { /* ... */ }

1
void MyClass<T>::foo<T>()...谢谢,我之前尝试过,但对我没有用。也许我需要清理项目。 - Michael
@user1074367:不,我认为就像我说的那样。 - Kerrek SB
3
实际上我写了这个: template <class T> template <class U> void MyClass<T>::foo() { U a; a.invoke(); } 并且它有效。 - Michael
14
@user1074367:嗯...是的,这就是我在答案中所说的,不是吗? - Kerrek SB
9
成员模板是一件非常正常和常见的事情。 - Kerrek SB
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接