ChatGPT解决这个技术问题 Extra ChatGPT

模板类中的模板函数

我有这个代码:

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();
}

我怎么能做到这一点?什么是正确的语法?

为什么不在类 decl 中执行函数 decl(参见 codepad.org/wxaZOMYW)?无论如何,您都不能将函数 decl 移出标题,所以...
@hiobs:FWIW,您可以将声明移动到 CPP 文件中。也就是说,我只这样做了一次来做一些黑客行为。在这种情况下,知道如何做到这一点至关重要。
有时必须在定义函数体所需的依赖项之后将函数定义移到类之外。当 A 类使用 B 类而 B 也使用 A 时,就会发生这种情况。在这种情况下,您声明 A 和 B,然后定义 A 和 B 方法。

K
Kerrek SB

写这个:

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

void MyClass::foo()...谢谢,我之前尝试过,但它对我不起作用..也许我必须做干净的项目。
@user1074367:不,我想就像我说的那样。
实际上我写的是: template template void MyClass::foo() { U a; a.invoke();并且它有效
user1074367:呃……是的,这就是我在答案中所说的,不是吗?
@mike:成员模板是一件非常正常且常见的事情。