【问题标题】:How to use a function pointer in a overloaded operator如何在重载运算符中使用函数指针
【发布时间】:2015-01-07 23:12:32
【问题描述】:

我正在尝试使用 Matlab 方法来访问矩阵元素。例如,如果我在 MatLab 中有以下内容:

>> A = [1 2; 3 4]

 A =

 1     2
 3     4

>> A(1,1) = 5

将生成此输出:

A =

 5     2
 3     4

这可以用c++中的操作符()来实现吗?提前致谢。

@编辑

对不起,我认为解析将通过函数指针来实现。

我会尽量说得更清楚。我有一个类矩阵,我想使用 operator() 更改类的相应值,将相应的数字传递给行和列。

【问题讨论】:

  • 这和函数指针有什么关系?
  • 无需重载任何东西,您只需执行A[1][1] = 5。或者您可以使用许多现有的 Matrix 类之一(或编写您自己的)并定义一个 () 运算符。
  • OP 可能仍然需要一个重载的operator() 来实现像 matlab 这样的基于 1 的索引。
  • 请阅读矩阵运算符的 C++ 常见问题解答:parashift.com/c++-faq/matrix-subscript-op.html
  • 由于 C 使用从零开始的索引,它当然是 A[0][0]。请编辑您的问题,准确说明您的问题。

标签: c++ arrays matlab matrix


【解决方案1】:
template<size_t I, size_t J>
class M
{
    public:
    M(double e00, ...)
    {
        // use arg_list :)
    }
    double& operator () (int i, int j)
    {
        return m[i-1][j-1];
    }
    private:
    double m[I][J];
};

M<2,2> A(1,2,3,4);
A(1,1)=5.0;

【讨论】:

  • 感谢您的回答,我尝试了您的 sujecstion,但我无法编译代码我收到以下错误:“lvalue required as left operand of assigment”@edit 我解决了问题,这是对的,谢谢你:)
猜你喜欢
  • 2014-12-24
  • 2013-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-31
  • 2013-04-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多