如何避免这种代码重复?
How to avoid this kind of code repetition?
为了避免代码重复,我需要做这样的事情(在我的真实代码中,我有更复杂的类型,类似于 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> >
}
您的 class C
需要使用 template template parameter 才能接受 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> >
为了避免代码重复,我需要做这样的事情(在我的真实代码中,我有更复杂的类型,类似于 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> >
}
您的 class C
需要使用 template template parameter 才能接受 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> >