Можно ли использовать атрибуты в неуправляемом коде? - PullRequest
1 голос
/ 30 сентября 2010

У меня есть неуправляемое приложение C ++ (неуправляемое значение: не использовать ничего из причудливых вещей .Net).Я хочу дополнить его некоторой метаинформацией, и похоже, что я мог бы использовать концепцию атрибутов.

То, чего я на самом деле пытаюсь достичь, это следующее.Начиная с чего-то простого класса, подобного этому:

class Book
   {
   public:
      ...
   private:
      string m_name;
      string m_author;
      int    m_year;
   };

Я хочу создать функциональность, которая может получить доступ к «метаинформации» класса и использовать ее для динамического построения логики, например,

* 1007.* диалоговое окно, содержащее 3 поля редактирования (имя, автор, год) сетка данных с 3 столбцами логика сериализации логика, которая отображает этот класс втаблица базы данных с 3 столбцами ...

Я вижу свои самые смелые мечты. Я представляю себе, как я изменяю этот класс следующим образом:

[id="Book"]
class Book
   {
   public:
      ...
   private:
      [id="Name", defaultValue="", maximumLength=100]
      string m_name;

      [id="Author", defaultValue="", maximumLength=100]
      string m_author;

      [id="Year", defaultValue=2000, minimum=1900]
      int    m_year;
   };

И затем могуэта «мета» информация для построения диалогов, заполнения таблиц данных, сериализации и десериализации экземпляров, ...

Но ограничена ли концепция атрибутов .Net / управляемым кодом?

Иесли бы я мог использовать атрибуты в неуправляемом коде, было бы возможно сделать что-то подобное?И с чего начать?(примеры, ...)

Кроме того, можно ли найти те же (или похожие) концепции в других компиляторах, на других платформах?

Я использую Visual Studio 2010 и, как было сказано ранее, неуправляемый / нативный C ++.

Ответы [ 2 ]

1 голос
/ 30 сентября 2010

Visual C ++ некоторое время поддерживал похожую нотацию атрибутов при определении объектов COM. Я думаю, что поддержка в конечном итоге была отброшена, потому что программисты используют C ++ для реализации COM, когда они хотят полного контроля, и компилятор, делающий вещи магическим образом вне контроля программиста, противоречит этому.

OTOH IDL все еще позволяет вам определять метаданные, он компилируется в исходный код C ++ вместе с библиотекой типов, которая содержит метаданные, и его можно получить во время выполнения.

1 голос
/ 30 сентября 2010

Нет. C ++ не имеет самоанализа или атрибутов.

Изучите Boost Serialization для сериализации, а для остальных вам нужно реализовать это вручную, насколько мне известно.

...