2010-09-30 2 views
1

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

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

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

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

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

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

[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

(Обратите внимание: вам не нужно указывать неуправляемый. Это просто C++. Не «неуправляемый C++». Gr Microsoft.) – GManNickG

+0

Полностью согласен с GMan. К сожалению, как только вы начинаете искать C++ на сайтах Microsoft, они предполагают, что вы используете .Net по умолчанию. – Patrick

ответ

1

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

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

1

№ C++ не имеет интроспекции или атрибутов.

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

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