C++本地类引用可以传递给函数吗?

发布于 2024-08-29 11:18:43 字数 167 浏览 6 评论 0原文

我想知道是否允许以下​​内容:

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

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

谢谢

I would like to know if the following is allowed:

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

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

thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

停滞 2024-09-05 11:18:43

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

本地类型、没有链接的类型、未命名类型或由任何这些类型复合的类型不得用作模板类型参数的模板参数。

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

void f() {
  class L {} local;
  struct C {
    static void function(L &l) {
      // ...
    }
  };
  C::function(local);
}

It's not allowed right now. But it's supported in C++0x. The current Standard says at 14.3.1/2

A local type, a type with no linkage, an unnamed type or a type compounded from any of these types shall not be used as a template-argument for a template type-parameter.

That said, if the function is also local, there's no problem

void f() {
  class L {} local;
  struct C {
    static void function(L &l) {
      // ...
    }
  };
  C::function(local);
}
写下不归期 2024-09-05 11:18:43

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

void function( ABC & );

void function() {
  class special : public ABC {
      virtual void moof() {}
  } local;
  function(local);
}

It's allowed if you use polymorphism instead of templates. Or if you don't need to extend the interface seen by function, simple inheritance will do.

void function( ABC & );

void function() {
  class special : public ABC {
      virtual void moof() {}
  } local;
  function(local);
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文