У меня есть класс, как следующее:Конструктор шаблонов 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 = {}. Есть ли способ сохранить пустой конструктор?
Бест, Moritz
Используйте один конструктор с пакетом параметров. Он также будет действовать как конструктор по умолчанию. – 0x499602D2
Вы уверены? Я получаю следующее сообщение об ошибке, если удалить первый конструктор: StandardTypes.hpp: 560: 5: Примечание: Композитный :: Композитного (TTypes ...) [с TTypes = {Varchar <50u>, Чара <1u>, Varchar <50u>} ] StandardTypes.hpp: 560: 5: примечание: кандидат ожидает 3 аргумента, 0 предоставлено. И для меня они имеют смысл, потому что второй конструктор ожидает аргументов. –
moo
У вас, очевидно, больше кода, который мы не видим, поэтому включите сообщение * full * error и код, который его производит. Измените это на вопрос. – 0x499602D2