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 に答える