, 내가 합리적으로 쉽게 initializer_list 생성자를 위임 할 수 있습니다 보인다 예를 들면.이 선택적으로 어쩌면 포장 용기
int main(int argc, char* argv[]) {
holder<std::vector<int>> y{1,2,3};
return EXIT_SUCCESS;
}
는하지만 꽤 분명 'INT', 또는 중첩 된 VALUE_TYPE의 형식 정의가없는 다른 유형으로 T 작동하지 않습니다. 그래서, T는 중첩 된 value_type typedef를 정의하고 std :: initializer_list에서 생성 가능하지 않으면 initializer_list 생성자가 생성되지 않도록하기 위해 enable_if 또는 유사한 트릭을 사용하고 싶습니다.
holder(typename std::enable_if<std::is_constructible<T, std::initializer_list<typename T::value_type>>::value, std::initializer_list<typename T::value_type>>::type values)
: t_(values) {}
하나를 : 컴파일러 (내 경우 ++ 3.1 그 소리가) 여전히 T는 int이며 잘못된 T :: VALUE_TYPE 걸려 넘어 때문에,
나는 다음과 같은 시도,하지만 여전히 작동하지 않습니다 개념을 표현하는 방법에 대한 생각은 "T가 value_type typedef를 갖고 T :: value_type의 initializer_list에서 생성 가능한 경우에만 T의 value_type에 대한 이니셜 라이저 목록 생성자에 대해이 템플릿을 제공합니다".
는'initializer_list' 올바른 값에 의해 전달하거나 일부 참조 형식으로 전달해야합니까? ('&&'?) –
@MartinBa :'std :: initializer_list'에 대한 값에 의한 전달이 정확하고 (권장 됨). –
'initializer_list'는 포인터와 크기를 포함하기 때문에 값으로 전달하는 것이 좋습니다. 데이터 자체는 복사되지 않습니다. –