C++ 获取参数的类型、模板、C++;
有以下简化的数据结构: 目标1.hC++ 获取参数的类型、模板、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 &
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中是可能的。