Совместное использование статических участников между шаблонными инстанцированиями? (невозможный?)

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

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

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

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

и по любой причине, я не думал до тех пор, пока я пошел для инициализации lookupTable это, когда я говорю

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

там будут многими отличающимися lookupTables обтекающий, приложенный к различным инстанцированиям SpecialArray.

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

Как, в C++ в моем уме (который не является реальным C++), это пошло бы что-то как

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

... но печально GCC не компилирует C++ в моем уме

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

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

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

10
задан Jonathan Leffler 7 July 2010 в 20:04
поделиться

2 ответа

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

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

template<class T, int N>
class SpecialArray : Base
{
    //...
};
19
ответ дан 3 December 2019 в 20:39
поделиться

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

-1
ответ дан 3 December 2019 в 20:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: