c++ - 如何使用另一个变量访问对象的变量/方法

标签 c++ class oop struct

假设我有一个 struct Node,它包含 xy,我想创建一个包含这些 Node 的 vector s.

struct Node {
    int x;
    int y;
    Node(int x, int y);
};

vector<Node *> nodes;

我想编写适用于xy 的各种函数。例如,我想编写一个 sort 函数,根据 x 坐标对节点 vector 进行排序,而另一个函数根据 y 进行排序。

编写一个同时实现 sort_by_x 和 sort_by_y 的函数绝对是一个更好的主意。我正在考虑编写一个函数,该函数采用 bool 之类的 isX 并相应地执行排序。但是,我想避免两次编写相同的代码(一次用于 x,一次用于 y)。我想写一段代码来执行相应的排序。我尝试使用以下代码实现它,但它在 C++ 中无效(因为它期望 cNode 中的变量之一)。

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 函数以返回 xy 并将它们存储在 std::function;这效率稍低,但不那么丑陋且更通用。

关于c++ - 如何使用另一个变量访问对象的变量/方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35442288/

相关文章:

c++ - 是否有任何类似数组的数据结构可以在两侧增长?

python - 从对象扩展类

java - 从java中的另一个类调用另一个函数

C++ 无用友元函数声明

php - 要求parent::__construct()的最优雅的方式

c++ - 当包含 Stroustrup 书中的 std_lib 时,不理解 VS 中 HelloWorld 的错误

c++ - _M_ 尝试实现多线程队列时出现 construct null not valid 错误

objective-c - Objective c 类扩展 header - xcode 中的新功能

c++ - 在数组中存储对象

php - 使用 PHP 的 Reflection 类执行 MySQL 查询安全吗?