template <typename T>
struct TPairs
{
typedef std::vector <TPair <T> > Type;
};
Здесь есть проблема: вы создаете тип, который является вектором TPair<T>
, что на самом деле не то, что вы хотите.Вам нужен вектор TPair<T>::Type
.
template <typename T>
struct TPairs
{
typedef std::vector <typename TPair <T>::Type > Type;
};
Что касается ваших вариантов использования, помните, что эти две созданные вами структуры существуют просто для имитации шаблона typedef, вам никогда не следует создавать их экземпляры вообще, просто используйтеих Type
член typedef.Итак:
TPair <double> ::Type my_pair (1.0, 0 ); // Good, creates a std::pair
TPair <double> my_pair2 (1.0, 0 ); // Not good, does not create an std::pair
TPairs <double> ::Type pairs; //Good, creates a vector
TPairs <double> pairs2; //Not good, doesn't create a vector
pairs.push_back(my_pair); // Ok, does what you mean
pairs2.push_back(my_pair); // Can't compile, the `TPairs` struct ins't a vector