, 그것은 쉽게 할 충분 :복사 생성자에서 범용 복사 생성자 템플릿으로의 위임은 어떻게해야합니까? 나는 보편적 복사 생성자 (모든 인수의 형태를 취할 것 하나)를 작성하려는 경우
class Widget {
public:
template<typename T> Widget(T&& other);
};
이 전통적인 복사 생성자를 생성하지 컴파일러를 방지, 그래서하지 않습니다 직접 작성하고 템플릿에 위임하고 싶습니다. 그러나 나는 그것을 어떻게합니까?
class Widget {
public:
template<typename T> Widget(T&& other);
Widget(const Widget& other): ??? {} // how delegate to the template?
};
나는
Widget(const Widget& other): Widget<const Widget&>(other){}
하지만 VC11,의 위임 생성자이 방법을 쓸 GCC 4.8을 시도하고, 모두가 거부 3.2 연타.
작성하려는 위임 복사 생성자는 어떻게 작성합니까?
복사 생성자의 경우 템플릿 인수를 삭제하고'std :: move'를 사용하여 컴파일합니다. –
@JoachimPileborg : 영리합니다. 따라서 Lvalues는 rvalues로 전달되지만 const이므로 이동 할 수 없습니다. 애매한,하지만 그것은 작동합니다! – KnowItAllWannabe
왜 이걸 원하니? "보편적 인 복사 생성자"가 아닌 욕심 많은 * 변환 * 생성자가있는 경우에는 대개 실제 복사 생성자와 근본적으로 다른 작업을 수행해야합니다. 또한 일반적인 문제는 물건을 복사 할 때 범용 생성자가 호출되지 않기를 바란다는 것입니다. – Xeo