2017-01-16 9 views
2

을 사용하여 표준 : :지도를 초기화 :는 초기화하는 좋은 쉽게, 기본적으로 구성 값

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입니다. 매핑 된 값을 해당 유형의 기본 생성되도록하려면 어떻게 신호를 보낼 수 있습니까?

답변

4

value initialization을 사용하면이 문제를 해결할 수 있습니다.

struct Foo 
{ 
    char x; 
}; 

std::map<int, Foo> myMap = 
{ 
    { 1, {} }, 
    { 2, {} } 
}; 
+0

나는 할 수있을 것이라고 생각했는데, 시도해 보았지만 작동하지 않았다. 그래서 내가 여기에 온 이유가있다. 더 많은 자극은 general_에서 작동하지만 value-type이 복사 가능하지 않은 경우에는 작동하지 않습니다. 그 이유를 아십니까? – Chowlett

+0

@Chowlett 귀하의 후속 질문에 대해서는 [이 답변] (http://stackoverflow.com/a/7232135/7359094)으로 안내 할 것입니다. –

+0

아. 그것은 그것을 설명 할 것이다. 그러므로 나는이 방식으로 초기화를 위해 완전히 채워야합니까? 아마도 myMap = {{1, Foo()}};도 아마도 정확히 같은 이유 때문에 실패합니다. – Chowlett

0

당신은 "yourNamespace :: 서브 라이브러리 :: moreLevels :: justBecause :: 것"의 인스턴스를 반환하는 함수를 만들 수 있습니다.