Совместное использование статических элементов между экземплярами шаблона? (невозможно?) - PullRequest
10 голосов
/ 07 июля 2010

Я делаю что-то глупое, но было бы неплохо, если бы это сработало.

Я пытаюсь специализировать типы так, чтобы мне нужна была моя собственная структура поиска, которая по сути глобальна (но в идеалеинкапсулирован как переменная класса), но я хочу, чтобы объекты были безопасными по типу, поэтому они параметризованы.

Следовательно, я, по сути,

template<class T, int N>
class SpecialArray
{
//...
private:
   static map<string, internal_t> lookupTable
}

и по какой-то причине я не сделалДо тех пор, пока я не начну инициализировать lookupTable, не думаю, что когда я скажу

template <class T, int N>
SpecialArray<T,N>::lookupTable;

, будет много разных lookupTable бегающих вокруг, привязанных к различным экземплярам SpecialArray.

Я подозреваю, что это может быть просто несбыточной мечтой, и правильный ответ - это просто сделать его отдельным глобальным одноэлементным объектом, но в любом случае можно ли сделать так, чтобы для всех SpecialArray был только один lookupTables?

Например, в моем C ++ (который не является реальным C ++) это будет выглядеть примерно так:

template <class T, int N>
SpecialArray<*,*>::lookupTable;

... но, к сожалению, GCC не компилирует C ++ вмой разум

Есть ли какой-нибудь реальный способ получить то, что я хочу (где-то в C ++ 0x-земле или что-то в этом роде)?Я, вероятно, столкнусь с этой проблемой также с некоторыми статическими методами, которые управляют этой таблицей поиска (которая не отслеживает типы или Ns).

... извините, если это не имело смысла.

Заранее благодарим за любую помощь или сочувствие, которое вы можете оказать.

Ответы [ 2 ]

19 голосов
/ 08 июля 2010

Вы можете добавить базовый класс без шаблонов и переместить lookupTable в этот класс:

class Base
{
protected:
    static map<string, internal_t> lookupTable
};

template<class T, int N>
class SpecialArray : Base
{
    //...
};
0 голосов
/ 07 июля 2010

Звучит так, будто вы должны просто сделать их глобальными и не беспокоиться об этом. Возможно, вы хотите использовать пространства имен?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...