【问题标题】:C++ arrow operator overloading. How to get name of accessed method?C++ 箭头运算符重载。如何获取访问方法的名称?
【发布时间】:2013-08-26 19:48:34
【问题描述】:

我想用这种方式重载数组运算符。

A b;
b->c;

b-> c 应该扩展为 boverloadarrayfunction("c"); 有可能吗?

编辑:免责声明我知道这是坏事。

为什么:我想向 QueryInterface 添加间接级别。

【问题讨论】:

  • 您可以重载operator->,但是如果重载不像指针那样,这样做是非常不好的形式。
  • 你认为哪个算子是“数组算子”?
  • c 不会仅仅因为你希望它成为一个字符串。
  • 我什至不寒而栗,甚至猜测 OP 具​​体描述的执行此操作的代码会像 read 更少维护。因为,.. 你知道,b[c] 就是不切吗?
  • @ZacHowland:我同意 - 我不想尝试理解这样的代码中发生了什么。

标签: c++ operator-overloading overloading dereference


【解决方案1】:
  1. operator->not 数组运算符。没有一个 C++ 运算符被正式这样命名,但最适合该名称的是索引 opeator[]
  2. 您想要的东西是不可能的。然而,在b->c 中,c 是一个符号,即某个变量或函数的名称。另一方面,"c" 是一个字符串文字,第一个不能转换为后者(除了一些黑色的预处理器魔法,它不适合表达式 b->c)。

您可能想查看重载operator-> 的工作原理,因为它的特殊之处在于它必须返回一个指针或另一个具有operator-> 重载的对象。编译器将在任何返回的对象上调用->,直到它真正取消引用一个指针。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-27
    • 2010-12-07
    • 2019-07-20
    • 2011-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多