通过函数传递未命名的类

the*_*row 4 c++ oop class

如何将此实例作为参数传递给函数?

class
{
    public:
    void foo();
} bar;
Run Code Online (Sandbox Code Playgroud)

我必须为课程命名吗?
它是可复制的,因为我没有将该类的复制ctor设为私有.
那怎么可能呢?

Dav*_*eas 6

也许如果你明确你想做什么会更好.你为什么要创建一个未命名的类?它符合界面吗?未命名的类非常有限,它们不能用作函数的参数,它们不能用作模板类型参数...

现在,如果您正在实现接口,则可以将引用传递给该接口:

class interface {
public:
   virtual void f() const = 0;
};
void function( interface const& o )
{
   o.f();
}
int main()
{
   class : public interface {
   public:
      virtual void f() const {
         std::cout << "bar" << std::endl;
      }
   } bar;
   function( bar ); // will printout "bar"
}
Run Code Online (Sandbox Code Playgroud)

注意:对于将模板参数视为选项的所有答案,未命名的类不能作为模板类型参数传递.

C++标准.14.3.1,第2段:

2本地类型,没有链接的类型,未命名的类型或从这些类型中的任何类型复合的类型不应用作模板类型参数的模板参数.

如果您使用comeau编译器进行测试(该链接用于在线试用),您将收到以下错误:

错误:模板参数可能不引用未命名的类型

作为旁注,comeau编译器是我所知道的最符合标准的编译器,除了是我尝试过的最有用的错误诊断之一.

注意:Comeau和gcc(g ++ 4.0)给出了上面代码的错误.英特尔编译器(以及来自其他人的评论MSVS 2008)接受使用未命名的类作为模板参数,违反标准.