const转换操作符
conversion operator with const
我有以下类:
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);
相关文章:
- 我可以将C 17 Capture lambda ConstexPR转换操作符的结果用作函数指针模板非类型参数吗?
- Clang vs GCC vs MSVC模板转换操作符-哪个编译器是正确的
- 为什么操作符的新函数需要强制转换
- c++中从整数到字符串的转换中,左移操作符是做什么的?
- 模板类型转换操作符=
- 链接隐式转换操作符
- 强制转换操作符函数在g++中可以很好地编译,但在其他编译器中不行.为什么
- 当目标类有多个构造函数时,消除强制转换操作符的歧义
- 删除转换操作符
- 强制转换操作符重载和引用
- 实现没有临时的转换操作符
- 不同的强制转换操作符被不同的编译器调用
- 将操作符转换为模板实参的特化
- 为什么模板化的用户定义转换操作符能够确定其返回类型?
- const转换操作符
- 在可强制转换为另一个模板类型的类模板中重载赋值操作符
- 调用转换操作符不能用于静态const变量
- 内部编译器错误-开关表达式中的模板化转换操作符
- 强制转换操作符可以是显式的吗?
- 在返回语句中统一初始化,并显式将操作符转换为bool