c ++ typedef修复模板args

时间:2018-04-30 05:03:02

标签: c++ c++11 templates c++03

从c ++ 11开始,我们可以这样做:

template<class A, class B> class C{};
template<class A> using D = C<A, int>;

所以D CB=int

有没有办法在c ++ 03中用typedef做到这一点?

这不起作用:

template <class A> typedef C<A, int> D;

2 个答案:

答案 0 :(得分:6)

这绝不是那么直截了当。 C ++ 03中唯一可以成为模板的东西是类和函数。关于类的好处是,它们本身可以包含typedef作为成员。

template<class A>
struct D {
  typedef C<A, int> type;
};

所以现在D<A>::type代表C<A, int>。这是模板元编程中作为元函数所知的。这很好,因为你可以在C ++ 03中实现它。

虽然C ++ 11引入了别名模板,但这些模板需要使用using关键字的新别名语法。与您一样typedef的尝试也不是有效的C ++ 11。

答案 1 :(得分:0)

你可以通过继承来实现C ++ 03的相似性:

for(i = 1; i < n; i++)
{
  if(a[i] > *max)
    max = &a[i];
}

虽然template<class A> D: public C<A, int> {}; 类型不完全D<A>,但其行为将相同。