gpt4 book ai didi

c++ - 是否可以创建一个函数来比较从对象 vector 中动态选择的变量?

转载 作者:太空宇宙 更新时间:2023-11-03 10:41:45 25 4
gpt4 key购买 nike

我不断遇到这样的情况,我希望能够创建一个函数来完成类似的任务。

编辑:

心目中的那种任务是比较对象之间的成员变量。如果有一种方法可以编写一个函数,允许您将对象作为参数,并将特定的成员变量作为另一个参数进行比较,那就太好了。这将需要某种方式来表示或标识我想在每次函数调用时比较的特定成员变量。

这是一个示例类和对象来说明我的意思:

class MyObject {
int var1;
int var2;
int var3;

// Unwritten constructor that sets all member variables in order
};

MyObject obj1 (1, 2, 3);
MyObject obj2 (4, 3, 2);

这是一组类似函数的示例,如果能够合并成一个函数,并动态选择使用哪个成员变量,那就太好了:

int compareMemberVar1 (MyObject obj1, MyObject obj2) {

return max(obj1.var1, obj2.var1);
}

int compareMemberVar2 (MyObject obj1, MyObject obj2) {

return max(obj1.var2, obj2.var2);
}

int compareMemberVar3 (MyObject obj1, MyObject obj2) {

return max(obj1.var3, obj2.var3);
}

这些显然会像这样使用:

int var1max = compareMemberVar1 (obj1, obj2);
int var2max = compareMemberVar2 (obj1, obj2);
int var3max = compareMemberVar2 (obj1, obj2);

这是我希望能够编写的那种函数来替换上面的 3 个函数:

int compareAnyMemberVar (MyObject obj1, MyObject obj2, /*representation of memberVar*/) {

return max(obj1./*memberVar*/, obj2./*memberVar*/);
}

它是相应的模拟用法:

int var1max = compareAnyMemberVar (obj1, obj2, /*representation of Var1*/);
int var2max = compareAnyMemberVar (obj1, obj2, /*representation of Var2*/);
int var3max = compareAnyMemberVar (obj1, obj2, /*representation of Var3*/);

编辑:

在上面,我试图在每次调用时使用相同的函数来比较不同的成员变量。因此/VarX 的表示/部分将是表示或标识我这次要访问的成员变量的某种方式。

这可能吗?如何?在此先感谢您提供的任何帮助,

皮特

最佳答案

您可以使用成员指针:

template<typename T>
int compareAnyMemberVar(MyObject obj1, MyObject obj2, T MyObject::* member) {
return max(obj1.*member, obj2.*member);
}

int var1max = compareAnyMemberVar(obj1, obj2, &MyObject::var1);
int var2max = compareAnyMemberVar(obj1, obj2, &MyObject::var2);
int var3max = compareAnyMemberVar(obj1, obj2, &MyObject::var3);

进一步概括:

template<typename T, class C>
int compareAnyMemberVar(C const& obj1, C const& obj2, T C::* member) {
return max(obj1.*member, obj2.*member);
}

关于c++ - 是否可以创建一个函数来比较从对象 vector 中动态选择的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34767344/

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