我有以下课程:
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;
}
答案 0 :(得分:3)
您无法(安全地)从B&
返回const A
(您可以使用const_cast
...)
您可以从B&
和/或A
从const 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);