c ++ typedef для исправления аргументов шаблона - PullRequest
0 голосов
/ 30 апреля 2018

С c ++ 11 мы можем сделать это:

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

, поэтому D равно C с B=int.

Есть ли способ сделать это с помощью typedef в c ++ 03?

Это не работает:

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

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

Вы можете достичь сходства на C ++ 03 с наследованием:

template<class A> D: public C<A, int> {};

Хотя тип D<A> не является точным C<A, int>, его поведение будет таким же.

0 голосов
/ 30 апреля 2018

Нет, это не так просто. Единственными вещами, которые могут быть шаблонами в 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.

...