如何避免这种代码重复?

时间:2020-08-03 20:01:11

标签: c++ class c++11 templates class-template

为了避免代码重复,我需要做类似的事情(在我的真实代码中,我有更复杂的类型,类似于T1T2):

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 个答案:

答案 0 :(得分:13)

您的类IF ABC = 'A' THEN [column_a] ELSEIF ABC = 'B' THEN [column_b] ELSEIF ABC = 'C' THEN [column_c] END 需要使用template template parameter才能接受CA作为其自身模板的输入,以便随后可以将参数传递给它们,例如:

B

现在您可以执行以下操作:

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

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

See a demo