const转换操作符

conversion operator with const

本文关键字:操作符 转换 const      更新时间:2023-10-16

我有以下类:

class A {
     B m_data;
};

我还有一个函数需要B&作为参数。

如何实现一个可以从const a &B& ?

我尝试了以下方法:

operator B() const { return m_data; }

但是这不起作用,当我想调用需要B&的函数时,它说"没有匹配的函数调用"。

EDIT:澄清一下我在做什么:我使用OpenCV并实现了一个Image类,它是cv::Mat的包装器。我想调用cv::calcOpticalFlowSF,它接受cv::Mat&我有一个const Image&

EDIT2:它应该是这样的:

const Image OpticalFlowSF::getFlowImage(const Image & in1, const Image & in2) {
    Image flow;
    cv::calcOpticalFlowSF(in1, in2, flow, m_layers, m_averagingBlockSize, m_maxFlow);
    return flow;
}

你不能(安全地)从const A返回B&(你可以使用const_cast…)
可以从A返回B&,或者从const A返回const B&

class A {
public:
    /* explicit */ operator const B&() const { return m_data; }
    /* explicit */ operator B&() { return m_data; }
    // Avoid that
    // operator B&() const { return const_cast<A*>(this)->m_data; }
    // simple getter.
    const B& getB() const { return m_data; }
    B& getB() { return m_data; }
private:
     B m_data;
};

顺便说一句,在大多数情况下,更简单的getter似乎更合适。

你可以这样使用:

A a;
B& b1 = a; // would not work if uncomment the explicit keyword.
B& b2 = a.getB();
B& b3 = statitc_cast<B&>(a);