나는 다음과 같은 클래스가 :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() { }
};
을하지만 작동합니다
최저
, 모리츠
매개 변수 팩과 함께 단일 생성자를 사용하십시오. 또한 기본 생성자 역할을합니다. – 0x499602D2
정말입니까? 첫 번째 생성자를 제거하면 다음과 같은 오류 메시지가 나타납니다. StandardTypes.hpp : 560 : 5 : 참고 : composite :: TTypes = {VARCHAR <50u>, Char <1u>, Varchar <50u>} ] StandardTypes.hpp : 560 : 5 : 참고 : 후보자는 3 개의 인수가 필요하며 0이 제공됩니다. 두 번째 생성자가 인수를 기대하기 때문에 나에게 의미가 있습니다. –
moo
분명히 볼 수없는 코드가 더 많으므로 * 전체 * 오류 메시지와 코드를 생성하는 코드를 포함하십시오. 그것을 질문으로 편집하십시오. – 0x499602D2