C++ 获取参数的类型、模板、C++;

C++ 获取参数的类型、模板、C++;,c++,templates,types,C++,Templates,Types,有以下简化的数据结构: 目标1.h template <class T> class Object1 { private: T a1; T a2; public: T getA1() {return a1;} }; 模板 类对象1 { 私人: T a1; t2; 公众: T getA1(){return a1;} }; 目标2.h template <class T> class Object2: public Object1 &

有以下简化的数据结构:

目标1.h

template <class T>
class Object1
{
  private:
     T a1;
     T a2;
  public:
     T getA1() {return a1;}
};
模板
类对象1
{
私人:
T a1;
t2;
公众:
T getA1(){return a1;}
};
目标2.h

template <class T>
class Object2: public Object1 <T>
{
   private:
      T b1;
      T b2;
  public:
     T getB1() {return b1;}
}
模板
类Object2:PublicObject1
{
私人:
b1;
t2;
公众:
T getB1(){return b1;}
}
有没有办法在下面的函数中获取对象的类型T:

功能

template <class Object>
void (Object *o1, Object *o2)
{
   T = o1.getA1();  //Is it possible to get T from object o1?
   ...
}
模板
无效(对象*o1,对象*o2)
{
T=o1.getA1();//是否可以从对象o1获取T?
...
}
或者,我们必须提供有关这两个对象的数据类型的附加信息:

template <class T, class Object>
void (Object *o1, Object *o2)
{
   T = o1.getA1();
   ...
}
模板
无效(对象*o1,对象*o2)
{
T=o1.getA1();
...
}
添加类型定义:

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
{
私人:
T a1;
t2;
公众:
T getA1(){return a1;}
T型;
};
模板
void foo(对象*o1,对象*o2)
{
typename对象::type x=o1.getA1();
...
}
您可以使用以下功能:

template <template<class> class Object, class T>
void func1(Object<T> &o1, Object<T> &o2)
{
   T x = o1.getA1();
}
模板
无效功能1(对象和o1、对象和o2)
{
tx=o1.getA1();
}
工作实例


顺便说一句,如果使用指针作为参数,则必须使用
->
运算符来调用方法。

似乎当模板被“实例化”为类型T时,您不能只写
tx=o1…
。我不明白为什么需要typedef,当t已经是typedef的类型…+1时,但是我知道它应该命名为
a1\u type
,而不仅仅是
type
。这在C++0x中是可能的。