4

我想知道是否允许以下​​行为:

template < class C >
void function(C&);

void function() {
  class {} local;
  function(local);
}

谢谢

4

2 回答 2

6

现在是不允许的。但它在 C++0x 中受支持。目前的标准说在14.3.1/2

本地类型、没有链接的类型、未命名类型或由这些类型中的任何一种组合而成的类型不应用作模板类型参数的模板参数。

也就是说,如果该函数也是本地的,则没有问题

void f() {
  class L {} local;
  struct C {
    static void function(L &l) {
      // ...
    }
  };
  C::function(local);
}
于 2010-04-18T15:56:32.887 回答
0

如果您使用多态性而不是模板,则允许这样做。或者,如果您不需要扩展 所看到的接口function,简单的继承就可以了。

void function( ABC & );

void function() {
  class special : public ABC {
      virtual void moof() {}
  } local;
  function(local);
}
于 2010-04-18T17:12:24.057 回答