Как избежать неопределенного порядка выполнения конструкторов при использовании std::make_tuple [дубликат] ⇐ C++
-
Гость
Как избежать неопределенного порядка выполнения конструкторов при использовании std::make_tuple [дубликат]
Как я могу использовать std::make_tuple, если важен порядок выполнения конструкторов?
Например, я предполагаю, что порядок выполнения конструктора класса A и конструктора класса B не определен для:
std::tuple t(std::make_tuple(A(std::cin), B(std::cin))); Я пришел к такому выводу после прочтения комментария к вопросу
Перевод std::tuple в пакет параметров шаблона
это говорит об этом
шаблон std::tuple parse(std::istream &stream) { return std::make_tuple(args(stream)...); } реализация имеет неопределенный порядок выполнения конструкторов.
Обновление, предоставляющее некоторый контекст:
Чтобы подробнее рассказать о том, что я пытаюсь сделать, вот набросок:
Я хочу прочитать некоторые сериализованные объекты из stdin с помощью двоичного анализа/сериализации CodeSynthesis XSD. Вот пример того, как выполняется такой анализ и сериализация: example/cxx/tree/binary/xdr/driver.cxx
xml_schema::istream ixdr (xdr); std::auto_ptr копия (новый каталог (ixdr)); Я хочу иметь возможность указать список классов, которые имеют сериализованные объекты (например, каталог, каталог, someOtherSerializableClass для 3 сериализованных объектов) и сохранить эту информацию как определение типа
шаблон структура variadic_typedef {}; typedef variadic_typedef myTypes; как предложено в разделе «Можно ли «сохранить» пакет параметров шаблона, не расширяя его?»
и найдите способ получить std::tuple для работы после завершения синтаксического анализа. Эскиз:
auto SerializedObjects(binaryParse(std::cin)); где сериализованные объекты будут иметь тип
std::tuple
Как я могу использовать std::make_tuple, если важен порядок выполнения конструкторов?
Например, я предполагаю, что порядок выполнения конструктора класса A и конструктора класса B не определен для:
std::tuple t(std::make_tuple(A(std::cin), B(std::cin))); Я пришел к такому выводу после прочтения комментария к вопросу
Перевод std::tuple в пакет параметров шаблона
это говорит об этом
шаблон std::tuple parse(std::istream &stream) { return std::make_tuple(args(stream)...); } реализация имеет неопределенный порядок выполнения конструкторов.
Обновление, предоставляющее некоторый контекст:
Чтобы подробнее рассказать о том, что я пытаюсь сделать, вот набросок:
Я хочу прочитать некоторые сериализованные объекты из stdin с помощью двоичного анализа/сериализации CodeSynthesis XSD. Вот пример того, как выполняется такой анализ и сериализация: example/cxx/tree/binary/xdr/driver.cxx
xml_schema::istream ixdr (xdr); std::auto_ptr копия (новый каталог (ixdr)); Я хочу иметь возможность указать список классов, которые имеют сериализованные объекты (например, каталог, каталог, someOtherSerializableClass для 3 сериализованных объектов) и сохранить эту информацию как определение типа
шаблон структура variadic_typedef {}; typedef variadic_typedef myTypes; как предложено в разделе «Можно ли «сохранить» пакет параметров шаблона, не расширяя его?»
и найдите способ получить std::tuple для работы после завершения синтаксического анализа. Эскиз:
auto SerializedObjects(binaryParse(std::cin)); где сериализованные объекты будут иметь тип
std::tuple
Мобильная версия