Совместное использование статических элементов между экземплярами шаблона? (невозможно?)
Я делаю что-то глупое, но было бы неплохо, если бы это сработало.
Я пытаюсь специализировать типы так, чтобы мне нужна была моя собственная структура поиска, которая по сути глобальна (но в идеале инкапсулирована как переменная класса), но я хочу, чтобы объекты были безопасными по типу, чтобы они были параметризованы.
Следовательно, я, по сути,
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
,
Я подозреваю, что это может быть несбыточной мечтой, и правильный ответ - это просто сделать его отдельным глобальным одноэлементным объектом, но в любом случае есть ли сделать его таким, чтобы был только один lookupTable
для всех SpecialArray
s?
Например, в C++, на мой взгляд (это не настоящий C++), это будет что-то вроде
template <class T, int N>
SpecialArray<*,*>::lookupTable;
... но, к сожалению, GCC не компилирует C++ в моей голове
Есть ли реальный способ получить то, что я хочу (где-то в C++0x-земле или что-то)? Я, вероятно, столкнусь с этой проблемой также с некоторыми статическими методами, которые управляют этой таблицей поиска (которая не отслеживает типы или Ns).
... извините, если это не имеет никакого смысла.
Заранее благодарим за любую помощь или сочувствие, которое вы можете оказать.
2 ответа
Вы можете добавить базовый класс без шаблонов и переместить lookupTable
в этот класс:
class Base
{
protected:
static map<string, internal_t> lookupTable
};
template<class T, int N>
class SpecialArray : Base
{
//...
};
Похоже, вы должны просто сделать их глобальными и не беспокоиться об этом. Возможно, вы хотите использовать пространства имен?