Шаблоны классов и статические члены (C++)

Модератор: Модераторы разделов

Аватара пользователя
inline
Сообщения: 72
ОС: Gentoo

Шаблоны классов и статические члены

Сообщение inline »

Имеется класс вроде

Код: Выделить всё

template <typename T>
class TemplateClass
{
    public:
        TemplateClass(T arg)
        { staticA[staticAN++] = (void*)&arg; }
        /* ... */
    private:
        static const int maxN = 0xff;
        static void *staticA[maxN];
        static int staticAN = 0;
};

Но ,как я понимаю, массив staticA будет разным для объектов с разным типом шаблона; мне же нужно чтобы он был общим для всех них. Конечно, можно использовать безымянное пространство имен в файле реализации, но т. к. важна эффективность, я хочу сделать некоторые функции инлайновыми, а из них тогда не будет доступно внутреннее пространство имен файла реализации.
Как это можно обойти?
Спасибо сказали:
v04bvs
Сообщения: 636
ОС: Debian GNU/Linux

Re: Шаблоны классов и статические члены

Сообщение v04bvs »

Унаследуй TemplateClass от нешаблонного BaseClass в котором объяви нужную переменную.
Только обращаться к ней надо будет this->staticA а не staticA (или BaseClass::staticA)
Спасибо сказали:
Аватара пользователя
inline
Сообщения: 72
ОС: Gentoo

Re: Шаблоны классов и статические члены

Сообщение inline »

v04bvs писал(а):
26.06.2007 14:00
Унаследуй TemplateClass от нешаблонного BaseClass в котором объяви нужную переменную.
Только обращаться к ней надо будет this->staticA а не staticA (или BaseClass::staticA)

понятно. спасибо!
Спасибо сказали:
Аватара пользователя
oav
Бывший модератор
Сообщения: 296

Re: Шаблоны классов и статические члены

Сообщение oav »

inline писал(а):
26.06.2007 13:40
но т. к. важна эффективность, я хочу сделать некоторые функции инлайновыми, а из них тогда не будет доступно внутреннее пространство имен файла реализации.
Как это можно обойти?

По-мойму ты ставишь ложные цели и ложными же путями пытаешься их решить.
Профайлер показал что в этом месте (не встраивание этой функции) критический участок по производительности?
Другими словами не надо придумывать (маяться) несуществующими/несущественными проблемами и потом героически их преодоливать.

з.ы. есессно имхо основанное исключетельно на первом сообщении топика.
Спасибо сказали: