堆分配结构的初始化程序列表

问题描述:

我有一个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

为什么不添加一个构造函数来'Bar'接受所需的值它会被称为? – 2012-03-16 14:06:33

+1

@Joachim - 我可能最终会这样做,但我想先验证它是否有必要。我讨厌当我最终做更多的工作,因为我错过了一些简单的语言功能。 – PaulH 2012-03-16 14:18:01

+0

在你的结构中放置一个构造函数。 – shihongzhi 2012-03-16 14:20:47

C++ 11允许它或类似的东西。既然你使用VC 2008, 然而,这不会帮助你。我所知道的唯一的解决方案是创建一个初始化 本地实例,然后通过这个:

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

尝试

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

Disclamer:只与GCC -std=c++0x测试。

尝试增加一个构造函数来你的结构,当new调用