gpt4 book ai didi

c++传递函数本身作为参数

转载 作者:行者123 更新时间:2023-11-30 03:35:34 26 4
gpt4 key购买 nike

我有一个容器类,它在具有类似 getter 函数的 map 中保存各种对象。它本身包含在使用该数据的类中。所以,我这里有一些看起来不太理想的链。

class Obj {
double getA() { return m_a; }
double getB() { return m_b; }
....

double m_a, m_b, ...;
}

class Container {
map<long, Obj> m_objs;

getA( int i ) { return m_objs[i].getA(); }
getB( int i ) { return m_objs[i].getB(); }
}

class User {
Conainer m_cont;
getA( int i ) { return m_cont.getA( i ); }

是否有更通用的方法通过以某种方式将调用函数传递给对象来获取对象值。我承认长链的整个构造看起来并不理想,但在那种情况下它看起来很自然,因为我有某种对象树并将信息向上传递到顶部节点,我不知道如何避免这种情况。但是如果有任何更好的方法来处理这个问题,我很高兴听到它

最佳答案

在这种情况下,您需要传递的对象是一个指向成员函数的指针:

class Obj {
// ...

double getA() {
return a;
}

double getB() {
return b;
}

private:
double a;
double b;
};

class Container {
// ...
get(int i, double (Obj::*what)()) { return (m_objs[i].*what)(); }
};

class User {
Container m_cont;
// ...
get(int i, double (Obj::*what)()) { return m_cont.get(i, what); }
};

// ...
double myA = user.get(1, &Obj::getA);

您还可以将其添加到Obj:

double get(double (Obj::*what)()) {
return (this->*what)();
}

使 ContainerUser 更一致:

class Container {
// ...
get(int i, double (Obj::*what)()) { return m_objs[i].get(what); }
};

关于c++传递函数本身作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41222105/

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