假设我有一个 struct Node
,它包含 x
和 y
,我想创建一个包含这些 Node 的 vector
s.
struct Node {
int x;
int y;
Node(int x, int y);
};
vector<Node *> nodes;
我想编写适用于x
或y
的各种函数。例如,我想编写一个 sort
函数,根据 x
坐标对节点 vector 进行排序,而另一个函数根据 y
进行排序。
编写一个同时实现 sort_by_x 和 sort_by_y 的函数绝对是一个更好的主意。我正在考虑编写一个函数,该函数采用 bool
之类的 isX
并相应地执行排序。但是,我想避免两次编写相同的代码(一次用于 x,一次用于 y)。我想写一段代码来执行相应的排序。我尝试使用以下代码实现它,但它在 C++ 中无效(因为它期望 c
是 Node
中的变量之一)。
void mySort(vector<Node *> &nodes, bool isX) {
char c;
if (isX) {
c = 'x';
}
else {
c = 'y';
}
// some code
nodes[i]->c // if c == 'x', x will be used, otherwise y.
}
能否请您给我一个重写上述代码的变通方法或一些其他基于不同变量实现相同功能的方法?
最佳答案
您可以在此处使用指向成员的指针:
int Node::*m;
if (isX) {
m = &Node::x;
}
else {
m = &Node::y;
}
// some code
nodes[i]->*m
语法相当丑陋,但它确实可以满足您的要求。如果您有可用的 C++11,另一种方法是编写简单的 lambda 函数以返回 x
或 y
并将它们存储在 std::function
;这效率稍低,但不那么丑陋且更通用。
关于c++ - 如何使用另一个变量访问对象的变量/方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35442288/