Использование typedefs для автозаполнения аргумента шаблона

82
8

У меня есть следующий класс: template<typename Trait, Value> class Storage. В одном приложении, где я использую этот класс, я хочу создать синоним для Storage который "автоматически заполняется" в Value to ValueA. Однако, поскольку класс используется в другом месте, не имеет смысла устанавливать значение ValueA в определении ValueA.

Я попытался создать typedef в заголовке для Storage, но я продолжаю работать с ошибками компилятора. По сути, я пытаюсь выполнить:

template<typename trait>
typedef Storage<trait, ValueA> MyStorage<trait>;

Чтобы я мог использовать разные черты, но значение автоматически сохраняется. Ошибка, которую я получаю, когда я пытаюсь использовать этот подход, - ошибка: объявление шаблона 'typedef'

Есть ли в этом случае ограничение в С++ 03?

спросил(а) 2015-03-24T02:43:00+03:00 5 лет, 7 месяцев назад
1
Решение
82

Самый простой способ - просто использовать новый класс

 template<typename trait> 
struct DefStorage : Storage<trait,ValueA>
{};

Технически вы должны быть осторожны, потому что это легко конвертируется в Storage<trait,ValueA>*, и если вы delete, деструктор для DefStorage не будет вызван, что является технически неопределенным поведением. Поэтому будьте осторожны. Но до тех пор, пока вы не куча, выделяющая их, нечего беспокоиться.

ответил(а) 2015-03-24T03:07:00+03:00 5 лет, 7 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема