Унаследовать конструкторы от базового класса шаблона без повторения аргументов шаблона?
Как мне наследовать конструкторы от базового класса шаблона без повторения аргументов шаблона (и без использования макросов):
Например, это не работает (с помощью GCC 4.8):
template
struct base {};
template
struct derived : base {
using base::base;
};
Это работает, если я повторяю аргументы шаблона базового класса:
template
struct base {};
template
struct derived : base {
using base::base;
};
Проблема в том, что "U" может быть что-то очень сложное, и это раздражает и подвержено ошибкам повторяться. Например, вот один из моих оригинальных мотивирующих примеров:
#include
#include
#include
#include
using namespace boost::multi_index;
struct as_list_tag {};
struct as_set_tag {};
template
struct unique_list : multi_index_container < T,
indexed_by < sequenced,
ordered_unique
>
> {
using multi_index_container < T,
indexed_by < sequenced,
ordered_unique
>
>
::multi_index_container;
using as_list = as_list_tag;
using as_set = as_set_tag ;
};
Я закончил работать над этим с помощью макроса:
#define MAKE_UNIQUE_LIST(template_params...)\
template \
struct unique_list : multi_index_container template_params\
{\
using multi_index_container template_params ::multi_index_container;\
using as_list = as_list_tag;\
using as_set = as_set_tag ;\
};
MAKE_UNIQUE_LIST(< T,
indexed_by < sequenced,
ordered_unique
>
>)
#undef MAKE_UNIQUE_LIST
Есть ли лучший способ приблизиться к этому? Какой-то синтаксический трюк мне не хватает? знак равно