2014-01-14 5 views
1

Я разрабатываю прототип клиент-сервер с буферами протокола. У меня есть два основных требования, чтобы понять, насколько эффективны протоколы протоколов и требования.Динамические изменения типов данных в C++?

  • Динамического изменение числа элементов данных в массиве (во время выполнения)
  • Динамического изменения типов данных структуры или индивидуального Variable (во время выполнения)

ли вы, есть ли какие-либо идеи о том, как C++ имеет дело с изменениями времени выполнения?

+0

C++ не имеет [отражение] (http://en.wikipedia.org/wiki/Reflection_%28computer_programming%29), поэтому вы не можете изменить тип во время выполнения. Однако вы можете посмотреть [Boost any] (http://www.boost.org/doc/libs/1_55_0/doc/html/any.html). –

+0

@JoachimPileborg: динамический полиморфизм с виртуальной функцией «WriteToPBuffer» может быть более подходящим, чем Boost :: Any. –

+0

@Ben voigt: До сих пор, что бы я ни делал, все было определено статически, и теперь мне нужно внести некоторые изменения во время выполнения. У меня нет четкого представления о возможностях изменения времени выполнения C++, ища экспертов, отвечающих на их решение. с этим ? –

ответ

1

Вы знаете, как C++ имеет дело с изменениями времени выполнения?

Это не так. C++ не имеет возможности изменить определение struct или class во время выполнения.

Однако, в зависимости от ваших потребностей, вы можете использовать существующие структуры данных C++, такие как std::map, чтобы реализовать свой собственный контейнер данных, члены которого могут меняться во время выполнения.

0

Этот ответ содержит только общие принципы, и я, вероятно, получите вниз голосование по нему:

  1. Используйте связанный список (или любую другую структуру данных, которые могут быть использованы в качестве FIFO), вместо массив.

  2. Определите общий класс под названием DataType с набором интерфейсных процедур, общих для всех ваших разных типов данных.

  3. Для каждого типа данных, который у вас есть, определите определенный класс, который наследует класс DataType.

  4. В каждом узле связанного списка храните указатель на экземпляр DataType; всякий раз, когда вы добавляете новую запись, создайте новый экземпляр одного из ваших типов данных и установите указатель DataType новой записи, чтобы указать на этот экземпляр.

  5. Убедитесь, что деструктор в классе DataType является виртуальным, то есть virtual ~DataType().

P.S .: директивы выше при условии, что у вас есть конечного числа различных типов данных, определенных заранее.

+0

Я не буду опускать вас, если вы можете оправдать использование связанного списка указателей, предпочитая массив/вектор указателей. – Casey

+0

Как я уже говорил, общие рекомендации ... Я имел в виду, что для OP использовать динамический FIFO вместо массива с постоянным размером (добавлено в ответе выше). –

Смежные вопросы