Как я могу использовать std:: make_tuple, если порядок выполнения конструкторов важен?
Например, я предполагаю, что порядок выполнения конструктора класса A и конструктора класса B равен undefined для:
std::tuple<A, B> t(std::make_tuple(A(std::cin), B(std::cin)));
Я пришел к такому выводу после прочтения комментария к вопросу
Перевод std:: tuple в пакет параметров шаблона
который говорит, что это
template<typename... args>
std::tuple<args...> parse(std::istream &stream) {
return std::make_tuple(args(stream)...);
}
реализация имеет порядок выполнения undefined конструкторов.
Обновить, предоставляя некоторый контекст:
Чтобы дать дополнительную информацию о том, что я пытаюсь сделать, вот эскиз:
Я хочу прочитать некоторые сериализованные объекты из stdin с помощью CodeSynthesis XSD двоичный синтаксический анализ/сериализация, Вот пример того, как выполняется такой синтаксический анализ и сериализация: example/cxx/tree/binary/xdr/driver.cxx
xml_schema::istream<XDR> ixdr (xdr);
std::auto_ptr<catalog> copy (new catalog (ixdr));
Я хочу иметь возможность указать список классов, которые имеют сериализованные объекты (например, каталог, каталог, someOtherSerializableClass для 3 сериализованных объектов) и хранить эту информацию в виде typedef
template <typename... Args>
struct variadic_typedef {};
typedef variadic_typedef<catalog, catalog, someOtherSerializableClass> myTypes;
как предложено в Возможно ли "сохранить" пакет параметров шаблона без его расширения?
и найдите способ получить std:: tuple для работы после завершения анализа. Эскиз:
auto serializedObjects(binaryParse<myTypes>(std::cin));
где serializedObjects будет иметь тип
std::tuple<catalog, catalog, someOtherSerializableClass>