수정 I 효과적으로 컴파일러는 A::A
의 어떤 인스턴스가 인수 목록과 일치하지 불평 멤버 이니셜 라이저 목록
#include <vector>
class A {
std::vector<int> m_sizes;
public:
A(std::initializer_list<int> const& sizes) : m_sizes(sizes) {}
};
class B {
A m_a;
public:
B(int size_front, int size_back, std::initializer_list<int> const& sizes) : m_a({ size_front, sizes, size_back }) {}
};
에 줄 몇 가지 코드가 있습니다. 을
std::initializer_list<int>
에 평평하게하는 방법이 있습니까? 아니면이 상황을 처리하기 위해
A
여분의 생성자를 제공해야합니까?
A
클래스를 수정할 수 없으면 어떻게해야합니까?
앞에'표준 : initializer_list'은 수정할 수 없습니다. 이 템플릿은 주로 컴파일러가 사용하기위한 템플릿입니다. 새로운'std :: initializer_list'를 초기화하는 유일한 방법은 기본 생성자를 사용하거나, 빈리스트를 생성하거나, 상수를 사용하는 것입니다. 이 경우,'A'는'vector' 매개 변수를 취하는 다른 생성자를 필요로하고 그것을 사용하여'm_sizes'를 초기화합니다; 그 생성자를 사용할 수 있습니다. 'A' 클래스를 수정할 수 없다면 아무 것도 할 수 없습니다. C++은 그런 식으로 작동하지 않습니다. –