Получить тип параметра, шаблоны C ++ - PullRequest
11 голосов
/ 20 февраля 2011

Существует следующая упрощенная структура данных:

Object1.h

template <class T>
class Object1
{
  private:
     T a1;
     T a2;
  public:
     T getA1() {return a1;}
};

Object2.h

template <class T>
class Object2: public Object1 <T>
{
   private:
      T b1;
      T b2;
  public:
     T getB1() {return b1;}
}

Есть ли способ получить тип T объекта в следующей функции:

Functions.h

template <class Object>
void (Object *o1, Object *o2)
{
   T = o1.getA1();  //Is it possible to get T from object o1?
   ...
}

или мы должны предоставить дополнительную информацию о типах данных обоих объектов:

template <class T, class Object>
void (Object *o1, Object *o2)
{
   T = o1.getA1();
   ...
}

Ответы [ 2 ]

18 голосов
/ 20 февраля 2011

Добавить typedef:

template <class T>
class Object1
{
  private:
     T a1;
     T a2;
  public:
     T getA1() {return a1;}
     typedef T type;
};

template <class Object>
void foo(Object *o1, Object *o2)
{
   typename Object::type x = o1.getA1();
   ...
}
1 голос
/ 20 февраля 2011

Вы можете использовать это:

template <template<class> class Object, class T>
void func1(Object<T> &o1, Object<T> &o2)
{
   T x = o1.getA1();
}

Рабочий пример на http://www.ideone.com/t8KON.

Кстати.если вы используете указатели в качестве параметров, вы должны использовать оператор -> для вызова методов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...