C++, static члены шаблонного класса

74
23 января 2022, 02:40

Рассмотрим следующий код:

template <typename TYPE_OF_CELL>
class Map
{
    public:
    static const size_t MAX_SIZE;
};

Член MAX_SIZE обозначает максимальный размер карты.

Я хочу понять следующее:

  • Возможно ли сделать так, чтобы член MAX_SIZE был общим для всех объектов всех типов, которые порождены данным шаблоном?
Answer 1

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

class GenericMap {
public:
    static const size_t MAX_SIZE;
}
template <typename TYPE_OF_CELL>
class Map: public GenericMap {
  //...
};

Также можно сделать его constexpr. Технически общим он не станет, но на практике для константы времени компиляции разницы не будет:

template <typename TYPE_OF_CELL>
class Map: public GenericMap {
    constexpr static size_t MAX_SIZE=1024;
};
Answer 2

Я бы не стал использовать память для этого:

template <typename TYPE_OF_CELL>
class Map
{
public:
    enum { MAX_SIZE = 1024 };
};

Константа MAX_SIZE известна во время компиляции и есть общая константа для всех специализаций

READ ALSO
Max&lt;TSource,TResult&gt; - Как получить максимальный элемент?

Max<TSource,TResult> - Как получить максимальный элемент?

У меня есть список (допустим, List) экземпляров Video:

92
C# Программа не закрывается из-за потока

C# Программа не закрывается из-за потока

Почему C# WPF программа не закрывается из-за потока в отдельном классе?

101
MS Office Interop Word Копия целиком первой страницы

MS Office Interop Word Копия целиком первой страницы

Помогите с реализацией копии первой страницы целиком прямо в текущем документе на вторуюТ

111
RabbitMQ блокирует поток на входящие данные. C#

RabbitMQ блокирует поток на входящие данные. C#

Сразу извиняюсь за не полную инфу по вопросуНе знаю всех тонкостей библиотеки которая поставляет данные, собственно с ней и проблема при...

85