홈>
C ++ 0x에서 모든 부모 생성자를 전달하는 올바른 방법은 무엇입니까?
이 작업을 수행했습니다 :
class X: public Super {
template<typename... Args>
X(Args&&... args): Super(args...) {}
};
- 답변 # 1
- 답변 # 2
나는 생각하고당신은
Super(std::forward<Args>(args)...)
를해야한다 물건을 제대로 전달하려면 와이즈 비즈 이름이 있으므로 rvalue 참조 전에 일반 참조에 바인딩됩니다.더 중요한 것은 이런 식으로 복사 생성자를 전달하지 않을 것입니다. 컴파일러는 템플릿 생성자를 고려하지 않기 때문에 여전히 컴파일러를 생성합니다. 제공된 예제에서는 컴파일러가 생성 한 것이므로 부모 사본 생성자를 호출하기 만하면됩니다. 정확히 원하는 것입니다. 더 복잡한 경우에 적합하지 않은 경우 직접 작성해야합니다.
args
관련 질문
- c++ : 템플릿을 사용하여 모든 매개 변수를 사용하는 멤버 함수를 배열에 저장
- c++ : 다른 개체 유형 간의 매개 변수 전송
- c++ : 템플릿이 포함 된 API에 대한 사용자 지정 지점을 제공하는 데 선호되는 방법은 무엇입니까?
- c++ : 가변 클래스 템플릿 인수 추론 또는 가변 함수 템플릿 인수 감소
- c++ : 클래스 외부에서 부분 spezialization을 사용하는 C ++ 템플릿 멤버 함수
- c++ : Visual Studio 2015에서 템플릿 클래스 정의에 C2988 오류가 발생합니까?
- c++ 템플릿의 이름 조회
- c++ : 내 클래스의 인스턴스를 다른 클래스 C ++로 전달
- c++ : 반복되는 템플릿 인수에 대한 단축키
- c++ : [temp.spec] /5과 [basic.odr] w.r.t간에 충돌이 있습니까? 명시 적 전문화에 대한 odr 규칙?
C ++ 0x에는 더 좋은 방법이 있습니다
완벽한 전달 템플릿을 선언하면 오버로드 확인시 형식이 잘못 작동합니다. 기본 클래스가
int
에서 변환 가능하다고 상상해보십시오. 클래스를 출력하는 두 가지 함수가 있습니다전화로
무엇을 부를 것인가?
Specific
때문에 모호합니다. 문자형 배열을 포함한 모든 인수를 변환 할 수 있습니다.기존 기본 클래스 생성자와 상관없이그렇게합니다. 선언을 사용하여 상속자를 생성하면이 작업을 수행하는 데 필요한 생성자 만 선언합니다.