Псевдоним для шаблона C++?

typedef boost::interprocess::managed_shared_memory::segment_manager 
    segment_manager_t; // Works fine, segment_manager is a class
typedef boost::interprocess::adaptive_pool
    allocator_t; // Can't do this, adaptive_pool is a template

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

Существует ли способ достигнуть псевдонима к шаблону в C++? (За исключением очевидного #define ALLOCATOR_T boost::interprocess::adaptive_pool)

6
задан porgarmingduod 23 April 2010 в 09:51
поделиться

2 ответа

Да, (если я правильно понял ваш вопрос) вы можете «обернуть» шаблон в структуру типа:

template<typename T>
class SomeClass;

template<typename T>
struct MyTypeDef
{
    typedef SomeClass<T> type;
};

и использовать ее как:

MyTypeDef<T>::type

Изменить: C ++ 0x будет поддерживать что-то вроде

template<typename T>
using MyType = SomeClass<T>;

Edit2 : В случае вашего примера

typedef boost::interprocess::adaptive_pool allocator_t;

может быть

template<typename T>
struct allocator_t
{
    typedef boost::interprocess::adaptive_pool<T> type;
}

и использоваться как

allocator_t<SomeClass>::type
17
ответ дан 8 December 2019 в 12:58
поделиться

C ++ не поддерживает это, хотя это планируется исправить в новом стандарте. Вам может сойти с рук создание нового шаблона класса из adaptive_pool , если нет нетривиальных конструкторов (или если вы готовы написать несколько конструкторов пересылки).

template <class T>
class allocator_t : public adaptive_pool<T> {
public:
    // Just making up a forwarding constructor as an example. I know nothing
    // anything about adaptive_pool.
    allocator_t(int arg1, float arg2) : adaptive_pool<T>(arg1, arg2) { }
};

РЕДАКТИРОВАТЬ: Забудьте этот ответ. Я голосую за @Akanksh.

1
ответ дан 8 December 2019 в 12:58
поделиться
Другие вопросы по тегам:

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