Инициализация класса на месте декларации
От: TailWind  
Дата: 14.11.11 00:58
Оценка:
Есть такой класс:
class A
{ 
  public: 
    int q; 
    A(int q_)  { q = q_; }
    void print() { printf("%d\n", q); }
};


Хочеться сделать так:
class B
{
  A a(3);
};

Мне так удобней, чтобы инициализация была рядом с определением.
Но так делать нельзя. Ошибка:
main.cpp(29) : error C2059: syntax error : 'constant'


Написал велосипед:
template<int Z>
class A_ : public A
{ 
  public: 
    A_() : A(Z) { }
};


Теперь можно писать:
class B
{
  A_<3> a;
};


Но что мне не нравиться. Это то что класс A часто инстанциируется с разными параметрами в более чем в 1000 мест.
Я написал тестовую программу и выяснил, что на размер exe это не влияет. Компилятор оптимизирует велосипед.
Но это влиеят на размер obj и на время компиляции. Которое возрастает процентов на 10%. Прога итак долго компилиться.
Поэтому это для меня фатально.

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