【问题标题】:Overloaded Parenthesis operator with no arguments feature name没有参数的重载括号运算符功能名称
【发布时间】:2014-10-21 14:11:13
【问题描述】:

维基百科关于Properties 的文章介绍了一个模板类,可以用来创建属性成员(稍作编辑):

template <typename T> class property {
        T value;
    public:
        T & operator = (const T &i) {
            return value = i;
        }

        operator T const & () const {
            return value;
        }
};


struct Bar {
    // Using the property<>-template.
    property <bool> alpha;
    property <unsigned int> bravo;
};

int main () {
    Bar bar;
    bar.alpha = true;

    return bar.bravo;
}

我要弄清楚的是 C++ 功能的名称,它允许 bar.bravo 存在且没有尾随 ()

代码compiles 很好...我只是不知道为什么!

谷歌搜索将我指向“函子”,但那些重载的括号运算符似乎都有参数(我可以理解它们是如何工作的)。

【问题讨论】:

  • 您将运算符的符号与普通函数声明的词法结构混淆了。 “括号运算符”是operator()()。这就是我们现在所拥有的。

标签: c++ operator-overloading functor


【解决方案1】:

这个:

    operator T const & () const {
        return value;
    }

overloaded conversion 运算符。因为它不是explicit,所以它允许隐式转换。

【讨论】:

    【解决方案2】:

    property&lt;T&gt; 类定义了“隐式转换为T const &amp;”运算符:

    operator T const & () const { return value; }
    

    因此,您可以将property&lt;T&gt; 类型的值转换为T 类型的值(更具体地说,转换为T 类型的常量左值)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-15
      • 2020-02-08
      • 1970-01-01
      • 2011-12-03
      • 1970-01-01
      • 1970-01-01
      • 2018-09-18
      相关资源
      最近更新 更多