gpt4 book ai didi

c++ - 将类字段传递给成员函数

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

我有一个类,它有几个大字段(比如一些大矩阵),并且有成员函数来计算这些矩阵(当然,矩阵的实际数量更大)

class MyClass  {
protected:
MatrixType m_11, m_12;
public:
void compute_m_11(double x);
void compute_m_12(double x);
}

现在,计算代码非常相似,最复杂的部分是矩阵元素的正确索引(这对所有涉及的矩阵都是相同的)。所以我考虑将索引和计算拆分为单独的函数:一个 compute_matrix 函数,它将执行索引并为矩阵中的每组索引调用一个 compute_element 函数.这将大大提高代码的可读性并简化调试。

所以 compute_matrix 函数将采用一个 MatrixType 引用到我需要填写的类字段和一个 std::function将执行实际计算。我显然想避免编写任何涉及额外复制矩阵的内容,因为它们可能非常大。

所以,问题是:

  1. 将对类字段的引用传递给类成员函数是否合法/有效?
  2. 如果是这样,我是否需要使用 std::bind 来传递计算成员函数? compute_elements 函数需要访问 MyClass 的一些其他字段。

这是我的想法:

class MyClass  {
protected:
MatrixType m_11, m_12;
double compute_elements_m11(int i, int j, double x);
double compute_elements_m12(int i, int j, double x);
void compute_matrix(MatrixType &m, double x, std::function<double(int, int, double) > f);
public:
void compute_m_11(double x) {compute_matrix(m_11, x, compute_elements_m11);};
void compute_m_12(double x) {compute_matrix(m_12, x, compute_elements_m12);};
}

最佳答案

传递成员引用是合法的(而且并不少见),但是你的函数类型是错误的。
您可以使用 std::bind,或者您可以使用普通的指向成员的指针:

class MyClass  {
protected:
MatrixType m_11, m_12;
double compute_elements_m11(int i, int j, double x);
double compute_elements_m12(int i, int j, double x);
void compute_matrix(MatrixType &m, double x, double (MyClass::*f) (int, int, double);
public:
void compute_m_11(double x) {compute_matrix(m_11, x, &MyClass::compute_elements_m11);};
void compute_m_12(double x) {compute_matrix(m_12, x, &MyClass::compute_elements_m12);};
};

std::bindstd::function 提供了更灵活的实现。

关于c++ - 将类字段传递给成员函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42108770/

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