const的转换运算符

时间:2014-08-04 11:48:06

标签: c++ operator-overloading

我有以下课程:

class A {
     B m_data;
};

我还有一个需要B& B的功能。作为一个论点。

如何实现可以从const A& amp;到B&?

我尝试了以下内容(源自here):

operator B() const { return m_data; }

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

编辑:澄清我在做什么: 我使用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;
}

1 个答案:

答案 0 :(得分:3)

您无法(安全地)从B&返回const A(您可以使用const_cast ...)
您可以从B&和/或Aconst B&返回const A

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;
};
BTW,在大多数情况下,更简单的吸气剂似乎更合适。

您可以这样使用:

A a;

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