【问题标题】:Template function inside template class模板类中的模板函数
【发布时间】:2012-01-28 05:59:57
【问题描述】:

我有这个代码:

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 方法。

标签: c++ templates


【解决方案1】:

这样写:

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: 会员模板是一件非常正常的事情。
猜你喜欢
  • 2010-12-20
  • 1970-01-01
  • 2013-04-12
  • 2012-11-04
  • 2017-10-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多