【问题标题】:How to avoid this kind of code repetition?如何避免这种代码重复?
【发布时间】:2020-11-23 22:04:18
【问题描述】:

为了避免代码重复,我需要做这样的事情(在我的真实代码中,我有更复杂的类型,类似于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> >
}

【问题讨论】:

  • 应该是C&lt;A&gt;::some o1;C&lt;B&gt;::some o2;
  • 错字已修正

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


【解决方案1】:

您的类C 需要使用template template parameter 才能接受AB 作为其自己模板的输入,以便它可以将参数传递给它们,例如:

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> >

See a demo

【讨论】: