假设:
template <class T, class P>
struct A;
template <class P>
struct B {};
我可以写:
template <class P>
struct A<int,P> : B<P> {};
但由于我必须重新定义构造函数,因此这很乏味。有没有办法写类似的东西:
template <class P>
using A<int,P> = B<P>;
答案 0 :(得分:0)
这是你应该做的:
template <class T, class P> struct A_impl;
template <class P> struct A_impl<int,P>
{
using type = B<P>;
};
template <class T, class P> using A = typename A_impl<T,P>::type;
// Now `A<int,P>` is an alias for `B<P>`.
代码使用C ++ 11中的type alias template。
作为替代方案,您可以使用B<P>
将所有构造函数从A<int,P>
导入using
。
对我来说看起来不太理想,但仍然可以使用。
#include <iostream>
template <class T, class P> struct A;
template <class P> struct B
{
B(int) {std::cout << "B(int)\n";}
};
template <class P> struct A<int,P> : B<P>
{
using B<P>::B; // <--
};
int main()
{
A<int, void> a(42); // Prints `B(int)`.
}