Как избежать такого повторения кода? - PullRequest
6 голосов
/ 03 августа 2020

Чтобы избежать повторения кода, мне нужно сделать что-то вроде этого (в моем реальном коде у меня есть гораздо более сложные типы, подобные T1 и T2):

template <class T1, class T2>
struct A 
{};

template <class T1, class T2>
struct B 
{};

template <class X>
struct C 
{
   using p1 = int;
   using p2 = char;

   using some = X<p1, p2>;
};

int main()
{
   C<A> o1; // must produce C<A<int,char> >
   C<B> o2; // must produce C<B<int,char> >
}

1 Ответ

13 голосов
/ 03 августа 2020

Ваш класс C должен использовать параметр шаблона шаблона , чтобы принимать A и B в качестве входных данных в свой собственный шаблон, чтобы затем он мог передавать им параметры, например:

template <template<typename T1, typename T2> class X>
struct C 
{
   using p1 = int;
   using p2 = char;

   using some = X<p1, p2>;
};

Теперь вы можете это сделать:

C<A> o1; // produce C<A<int,char> >
C<B> o2; // produce C<B<int,char> >

Посмотреть демонстрацию

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