Шаблон значения переменной-члена - PullRequest
0 голосов
/ 16 января 2019

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

Struct Gray
{
const int data_size = 32*32;
int width;
int height;
uint8_t data[data_size ]
}

Struct color
{
const int data_size = 32*32*3;
int width;
int height;
uint8_t data[data_size ]
}

Я хочу объединить эти 2 класса в один шаблонный класс.

Как я могу написать такой класс шаблона, который принимает в качестве параметра шаблона значение data_size, что-то вроде template<int data_size> struct? Мы действительно используем шаблон для таких целей в C ++? Я знаю, что шаблон используется для сложного типа переменной, но никогда не видел варианта использования для значения переменной.

Ответы [ 2 ]

0 голосов
/ 16 января 2019

Вы могли бы написать что-то в форме

template<int size>
struct Foo
{
    // ToDo - other members here
    uint8_t data[size];
};

typedef Foo<32*32> Gray;
typedef Foo<32*32*3> color;

Но обратите внимание, что Gray и color - это совершенно разные типы. Как таковой, этот шаблон используется не так часто. Одним из расширений будет использование не шаблонного базового класса для Foo для, возможно, членов height и width. Но если вам действительно не нужны функции времени компиляции, которые предлагают шаблоны, и вы не хотите использовать constexpr, который является еще одной альтернативой, обычный полиморфизм времени выполнения, вероятно, лучше всего подходит для большинства целей.

0 голосов
/ 16 января 2019

Да, это одно использование шаблонов:

template<int size>
struct color
{
    int width;
    int height;
    uint8_t data[size];
};

Аргументы шаблонов могут быть классом, но они также могут быть некоторыми простыми значениями, такими как int.

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