나는 뭔가를 놓치고 정확히 무엇을 모르겠다 고 생각합니다. 코드 스 니펫을 살펴 보겠습니다. 초기화에서 유형을 변환 할 수 없습니다.
template <typename T>
struct Foo {
Foo (int n, int p, string s, T t = {})
: m_n {n}, m_p {p}, m_s {s}, m_t {t}
{}
const int m_n;
const int m_p;
const string m_s;
T m_t;
};
그리고 사용
은 다음과 같습니다Foo<int> f_int1 {1, 2, "A", 155};
Foo<int> f_int2 {1, 2, "A"};
모든 의도처럼. 그러나 Foo의 T 매개 변수로 사용자 정의 유형을 원할 때 일부 오류가 발생합니다. 고려 :
struct Boo {
int z;
int l;
};
그리고 사용 :
Foo<Boo> f_boo1 {1, 2, "A"};
Foo<Boo> f_boo2 {1, 2, "A", {1, 2}};
이 모두 명령 줄 (GCC 4.8.1) :
cannot convert ‘Boo’ to ‘int’ in initialization
이 같은 우우 개체를 만들 수 있습니다
:
Boo boo1 {};
Boo boo2 {1, 2};
을
그래서, 당신은 나에게 t 그는 문제가 무엇입니까?
가능한 해결 방법 :
struct Boo {
Boo() : z {}, l {} {}
Boo (int p1, int p2) : z {p1}, l {p2} {}
int z;
int l;
};
그리고 지시 아래 모두가 의도 한대로 작동 :
나를 위해Foo<Boo> f_boo1 {1, 2, "A"};
Foo<Boo> f_boo2 {1, 2, "A", {1, 2}};
, 그 괜찮아, 나는 두 개의 생성자를 추가 할 수없는 어떤 이유가 표시되지 않습니다 그런데 타입이 내 것이 아니라면? 생성자와 함께 간단한 래퍼를 작성해야합니까? 당신이 Boo
에 집계 초기화를 수행하기 위해 노력하고 있기 때문이다
감사합니다, 아르투르
[관련] (http://stackoverflow.com/questions/21340801/uniform-initialization-fails-to-copy-when-object-has-no-data : 그냥 목록 초기화를 사용하지 않는 -members) 오류 –