дамп структур C++ к текстовому файлу

Вы не применяете ключ к родительскому фрагменту.

Вы можете использовать <> так же, как и любой другой элемент, за исключением того, что он не поддерживает ключи или атрибуты. ~ https://reactjs.org/docs/fragments.html#short-syntax

blockquote>

Вы используете короткий синтаксис <>, который не поддерживает ключи. Использование:


      
{isValidated ? 'x' : index + 1}

7
задан Joel Coehoorn 29 May 2009 в 17:28
поделиться

5 ответов

Никакое отражение в C++, таким образом, необходимо сделать это вручную, например, (использующий iostream, для simplicty):

dump_A(std::cout, "A", a);

void dump_A(std::iostream& os, const char* name, A const& a)
{
    os << "Structure " << name << '\n'
       << name << ".one = " << a.one << '\n'
       << name << ".two = " << a.two << '\n';
}
8
ответ дан 6 December 2019 в 12:55
поделиться

C++ не является самосозерцательным. Таким образом, это ничего не знает о содержании его структур. Необходимо использовать своего рода ручную разметку или отражательную систему, чтобы сделать это.

Конечно, если Вы соглашаетесь с информацией о жестком кодировании о структурах, можно вывести информацию с любым методом ввода-вывода.

Например:

struct A
{
  int member1;
  char member2;
};

void PrintA (const A& a)
{
  std::printf ("member1: %d\n", a.member1);
  std::printf ("member2: %c\n", b.member2);
}

Поскольку Вы видите, что это утомительно, потому что это требует глубоких знаний структуры и не будет обновлено автоматически, если структура изменяется. Но издержки отражательной системы, чтобы сделать это "правильно" может быть недостатком, особенно если Вы учитесь.

5
ответ дан 6 December 2019 в 12:55
поделиться

Я имел успех с библиотеками сериализации повышения. Его простое в использовании и естественный выбор для сериализации и десериализации структур данных C++.

Вот ссылка на учебное руководство: http://www.boost.org/doc/libs/1_38_0/libs/serialization/doc/index.html

3
ответ дан 6 December 2019 в 12:55
поделиться

Это применяется больше к C, чем C++, но примите во внимание, что, если Вы действительно пишете структуру непосредственно в файл (или сетевой буфер) затем, результатом будет зависимый компилятора и машина. Целые числа будут записаны в порядке байтов хоста, и компилятор, дополняющий байты для структуры, будет также включен. Попытка считать буфер на машине с другим порядком байтов или различными директивами компилятора не будет работать

Это произошло бы с чем-то как (быть прощающим на синтаксисе): запишите (f, &A, sizeof (A));

0
ответ дан 6 December 2019 в 12:55
поделиться

ЕСЛИ это - просто структура, простой тип данных C-compatible, без виртуальных методов и НИКАКИХ указателей, то как краткосрочный клудж Вы могли просто использовать:

struct Foo {  int a, b;  char c, d, e[50]; }  f;
write( fd, & f, sizeof(f) );

Однако не ожидайте, что это будет межплатформенным, или даже изменения кросс-компилятора на той же платформе.

Я думаю, что обсудил это прежде...

0
ответ дан 6 December 2019 в 12:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: