gpt4 book ai didi

c++ - 从对象列表、模板、C++ 中获取参数的类型

转载 作者:行者123 更新时间:2023-11-30 02:09:51 30 4
gpt4 key购买 nike

这个问题紧接我之前的问题

Get type of the parameter, templates, C++

有如下数据结构:

对象1.h

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

对象2.h

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

列表.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(即对象不是函数的直接参数而是模板参数)?

进程.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
}
};

但是他的构造有效(即 Object 表示函数的参数)

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);

}

最佳答案

问题出在 objects[0] 上,其中 objects 是一个指针。您应该将其写为 (*objects)[0] 以调用所指向对象的 operator[]。

关于c++ - 从对象列表、模板、C++ 中获取参数的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5057877/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com