유일한 사용자 정의 생성자 클래스 A를 고려 비 복사 가능한 비 이동 수업의 튜플을 초기화 : (A)의 튜플을 포함가
class A
{
public:
A(float) {}
private:
A() = delete;
A(const A&) = delete;
A(A&&) = delete;
};
그리고 다른 클래스 B, (그것이 유일한 튜플의 구성원이 될 수 있도록) 단순화를 위해 : 이제
class B
{
public:
B() : ta(0.0f) {} // ta initialization OK
private:
std::tuple<A> ta;
};
우리는 B의 객체를 선언 할 수 있고 그것을 잘 작동합니다 :
B b;
그러나 호를 A
의 생성자에 둘 이상의 인수가있는 경우 동일한 작업을 수행 하시겠습니까?
class A
{
public:
A(float, int) {}
private:
A() = delete;
A(const A&) = delete;
A(A&&) = delete;
};
class B
{
public:
// B() : ta(0.0f, 1) {} // Compilation errors
// B() : ta({0.0f, 1}) {} // Compilation errors
// B() : ta{0.0f, 1} {} // Compilation errors
// B() : ta(A(0.0f, 1)) {} // No constructor to copy or move A
private:
std::tuple<A> ta;
};
B b;
std::make_tuple
, std::forward_as_tuple
등 그 문제가 해결되지 않는 등, 기본, 복사 A
의 이동 생성자를 사용할 수 없기 때문에.
관련이있을 수 있습니다. http://stackoverflow.com/a/24888173 –