首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为LValue和RValue编写不同的LValue?

如何为LValue和RValue编写不同的LValue?
EN

Stack Overflow用户
提问于 2013-08-14 20:28:53
回答 1查看 376关注 0票数 1

我正在尝试将C库与我的C++项目连接起来。库有自己的向量类型,假设为VECTOR,并提供元素访问:

代码语言:javascript
复制
int vector_set_value(VECTOR* vec, int index, double new_value);
int vector_get_value(VECTOR* vec, int index, double* retrieved_value);

现在最好将getset操作封装为operator[]重载。

代码语言:javascript
复制
double& operator[](int index);
const double& operator[](int index) const;

但我如何告诉operator[]有不同的行为,在vec[index]=3double value=vec[3]之间?对于前面的vector_set_value,应该调用vector_get_value,而对于后者,应该调用vector_get_value

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-14 22:28:44

我不会尝试将一个接口封装到另一个接口中。

尽管如此,如果您真的想这样做,一个可能的解决方案是创建一个代理对象,并让您的operator[]返回该代理对象。代理对象将转换为底层类型const double&进行读取,重载operator=用于写入。它们中的每一个都将调用适当的库函数。

这将允许使用类似于C++ std::vectorMyVector v(...); v[1] = 10.1; double d = v[1];的语法,但是会有问题。代理对象不能在所有上下文中替换真实类型,仅在其中一些上下文中。即使在那里,语义也是不同的,因此,虽然它看起来像一个规则向量,但是有一天,您将尝试以它不支持的方式使用代理,您将对http://www.joelonsoftware.com/articles/LeakyAbstractions.html感到困惑。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18241676

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档