2012-03-16 14 views
3

私はヒープ構造体を割り当て、イニシャライザリストを使用して初期化するVisual Studio 2008 C++プロジェクトを持っています。ヒープに割り当てられた構造体のイニシャライザリスト

class Foo { 
public: 
    explicit Foo(int a); 
}; 

struct Bar { 
    Foo foo; 
    int b; 
}; 

Bar a = Bar { Foo(1), 2 };  // Works! 
Bar* b = new Bar{ Foo(1), 2 }; // Errors! 

これを行う方法はありますか?

+0

を呼び出されたときに、それが呼ばれるのですか? –

+1

@ヨアヒム - 私はおそらくそれをやり遂げるだろうが、私はそれが最初に必要であることを確認したかった。私は単純な言語機能を見逃してしまったので、もっと仕事をしてしまうと嫌いです。 – PaulH

+0

構造体にコンストラクタを配置します。 – shihongzhi

答えて

1

C++ 11では、このようなことが可能です。しかし、VC 2008、 を使用しているので、これはあなたを助けません。唯一のGCC -std=c++0xでテスト:

Bar* b = new Bar({ Foo(1), 2 }); 

Disclamerを試してみてください

Bar forInitialization = { Foo(1), 2 }; 
Bar* b = new Bar(forInitialization); 
2

:私が知っている唯一の解決策は、初期設定で ローカルインスタンスを作成し、これを通過させることです。あなたの構造体にコンストラクタを追加

0

てみBar`が必要な値を受け入れる `にコンストラクタを追加しないのはなぜnew

関連する問題