如果我有一個std::map<int, char>
,這是很好的和容易初始化:初始化的std ::地圖,使用缺省構造值
std::map<int, char> myMap =
{
{ 1, 'a' },
{ 2, 'b' }
};
如果我的價值型有一個默認的構造函數,我可以初始化它像這樣:
struct Foo
{
char x;
};
std::map<int, Foo> myMap =
{
{ 1, Foo() },
{ 2, Foo() }
};
但是假設我的價值型有一個默認的構造函數,但笨重鍵入:
std::map<int, yourNamespace::subLibrary::moreLevels::justBecause::Thing> myMap =
{
// What goes here? I don't want to type
// yourNamespace::subLibrary::moreLevels::justBecause::Thing again.
};
短缺using
聲明使值類型更加鍵盤友好,有沒有辦法用一組鍵來初始化map
,所有這些鍵都使用默認構造的yourNamespace::subLibrary::moreLevels::justBecause::Thing
?我如何表示我希望映射的值是其默認構造的類型?
我以爲我可以,而且我嘗試過,而且沒有奏效......這就是我來到這裏的原因。進一步prodding顯示它在一般情況下工作,但如果值類型不是可複製構造的,則不適用。你知道爲什麼不? – Chowlett
@Chowlett關於你的後續問題,我會把你推薦給[這個答案](http://stackoverflow.com/a/7232135/7359094)。 –
啊。這將解釋它。因此,我是以這種方式完成初始化的?我注意到,即使'myMap = {{1,Foo()}};'失敗了,大概是完全一樣的原因。 – Chowlett