Подскажите хороший синтаксис
От: Went  
Дата: 10.09.11 17:47
Оценка:
Здравствуйте.
Подскажите, как можно наиболее красиво изобразить следующее определение. В коде мы пишем что-то лаконичное вроде:
// some.h, псевдокод
defclass(newtype, sometype, sometext, sometypes);

Эта строка должна определить новый класс newtype, наследованный от sometype, хранящий указатель на строку sometext, и хранящая в себе значению элементы типов sometypes.
Например, код
defclass(NewClass, BaseClass, "This is new class", (int, float));

Должен привестись к такому:
сlass NewClass : public BaseClass
{
public:
  NewClass(int a0, float a1)
  : m_text("This is new class")
  , m_arg0(a0)
  , m_arg1(a1)
  {
  }

private:
  int   m_arg0;
  float m_arg1;
  const char* m_text;
}

Думаю, смысл ясен и задача более чем распространенная.
Какие варианты я рассмотрел:
1. Через шаблон:
// Использование
typdef NewClass MyCoolTemplate<BaseClass, "This is new class", int, float>;

Клевый вариант, но как протащить текст? Чтобы при этом не плодить новые типы в каждой единице компиляции?

2. Через макрос
#define defclass(type, base, text, ...) \
class type : public base \
{ \
public: \
  type(__VA_ARGS__) {} \ // Вот тут палево, как передать __VA_ARGS__ в туплу конструктором?
  boost::tuple<__VA_ARGS__> args;\
}
// Использование
defclass(NewClass, BaseClass, "my cool text", int, float);

Тоже нормальный, но там проблема в конструкторе.

3. 2-ой вариант, но через ацкий BOOST_PREPROCESSOR. Долго читал мануалы, но так и не понял, как мне эти параметры перенести куда надо...

Какие идеи есть у вас?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.