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

Этот вопрос следует моему предыдущему вопросу

Получить тип параметра, шаблоны, C ++

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

Object1.h

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

Object2.h

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

List.h

template <typename Item>
struct TList
{
  typedef std::vector <Item> Type;
};

template <typename Item>
class List
{
  private: 
   typename TList <Item>::Type items;

  public:
   Item & operator [] ( const unsigned int index ) {return this->items[index];}
};

Есть ли способ получить тип T объекта изсписок объектов (т.е. объект не является прямым параметром функции, а параметром шаблона)?

Process.h

class Process
{
  template <class Object>
  static void process (List <Object> *objects)
  {
    typename Object::type a1 = (*objects[0]).getA1(); // g++ error: 'Object1<double>*' is not a class, struct, or union type
  } 
};

Но его строительные работы (т.е. объект представляет параметрфункция)

template <class Object>
void process (Object *o1) 
{
    typename Object::type a1 = (*o1).getA1(); // OK
}

Есть основная программа:

int main()
{
   Object1 <double> o1;
   Object1 <double> o1;

   List <Object1 <double> > list;

   Process::process(&list);

}

1 Ответ

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

Проблема с объектами [0], где объектами является указатель.Вы должны написать это как (* objects) [0] для вызова оператора [] объекта, на который указывает.

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