2015-02-03 4 views
1

나는 다음과 같은 클래스가 :Variadic 템플릿 생성자와 빈 생성자?

template<typename ... TTypes> 
class Composite { 
public: 
    //Composite() : null(true) { } 
    Composite(TTypes... values) : values(std::make_tuple(values...)), null(false) { } 
private: 
    bool null; 
    std::tuple<TTypes...> values; 
}; 

int main(int argc, char *argv[]) { 
    Composite<int, char, int> a1; 
} 

을하지만 두 번째 생성자는 TTypes와 첫 번째를 무시 때문에이 오류로 연결 = {}. 빈 생성자를 유지할 방법이 있습니까?

template<typename ... TTypes> 
class Composite : public ValueSet { 
public: 
    Composite(TTypes... values) { } 
}; 

template<> 
class Composite<> : public ValueSet { 
public: 
    Composite() : ValueSet() { } 
}; 

을하지만 작동합니다

최저

, 모리츠

+5

매개 변수 팩과 함께 단일 생성자를 사용하십시오. 또한 기본 생성자 역할을합니다. – 0x499602D2

+0

정말입니까? 첫 번째 생성자를 제거하면 다음과 같은 오류 메시지가 나타납니다. StandardTypes.hpp : 560 : 5 : 참고 : composite :: TTypes = {VARCHAR <50u>, Char <1u>, Varchar <50u>} ] StandardTypes.hpp : 560 : 5 : 참고 : 후보자는 3 개의 인수가 필요하며 0이 제공됩니다. 두 번째 생성자가 인수를 기대하기 때문에 나에게 의미가 있습니다. – moo

+0

분명히 볼 수없는 코드가 더 많으므로 * 전체 * 오류 메시지와 코드를 생성하는 코드를 포함하십시오. 그것을 질문으로 편집하십시오. – 0x499602D2

답변

0

나는 다음과 같은 일이 주위에 당신을위한 옵션인지 확실하지 않다.

+0

아니, 내 주요 방법으로 작동하지 않습니다. 변수를 다음과 같이 초기화 할 수 없습니다. Composite a1; – moo

+0

첫 번째 클래스에 빈 생성자를 추가하십시오. 그것은 주어진 예제에서'Composite (int, char, int)'생성자만을 생성하기 때문에 템플릿 생성자와 모순되지 않습니다. – example

관련 문제