У меня есть несколько шаблонных классов, объявление которых выглядит следующим образом:
template <typename T, typename A, typename B, typename C>
class foo1;
template <typename T, typename A, typename B, typename C>
class foo2;
...
Я использую их в следующем контексте (каждый foo*
создается с A
и B
и C
, которыеbar
был создан с помощью):
template <typename A, typename B, typename C>
class bar {
foo1<int, A, B, C> f1;
foo2<int, A, B, C> f2;
foo2<char, A, B, C> f3;
};
Для простоты и ясности я хотел бы иметь возможность пропустить параметры A
, B
и C
внутри bar
и просто написать:
...
foo1<int> f1;
...
Я знаю, что я мог бы просто использовать шаблон псевдонимов для всех foo
типов, таких как:
template <typename T>
using foo1_a = foo1<T, A, B, C>;
, но может быть много для foo
типов, и это будеттребует создания псевдонима для всех них.
Я пытался поместить все эти псевдонимы в класс:
template <typename A, typename B, typename C>
class types {
template <typename T>
using foo1_a = foo1<T, A, B, C>;
...
};
, а затем использование выглядит следующим образом:
...
using t = types<A,B,C>;
typename t::template foo1_a<int> f1;
...
но, на мой взгляд, это выглядит еще хуже ...
Можно ли достичь этого другим способом?