初始化成员函数字段

时间:2016-01-19 14:03:00

标签: c++ compiler-errors member-functions

在阅读名为Abominable functions的C ++ 1z论文时,我发现了以下代码:

class rectangle {
    public:
    using int_property = int() const;  // common signature for several methods

    int_property top;
    int_property left;
    int_property bottom;
    int_property right;
    int_property width;
    int_property height;

    // Remaining details elided
};

我之前从未见过这样的代码(论文本身说找到这样的代码很奇怪)所以我想尝试一下这种方法,并为那些{{1}提供一个值。 }:

int_property

在上面的修改中,编译器抱怨class rectangle { int f() const { return 0; } public: using int_property = int() const; // common signature for several methods int_property top = f; // <--- error! int_property left; int_property bottom; int_property right; int_property width; int_property height; // Remaining details elided }; f;我的其他尝试是:

(only '= 0' is allowed) before ';' token

所以问题是:

  • 如何制作所有class rectangle { int f() const { return 0; } public: using int_property = int() const; // common signature for several methods // invalid initializer for member function 'int rectangle::top() const' int_property top{f}; int_property left{&f}; // invalid pure specifier (only '= 0' is allowed) before ';' token int_property bottom = f; int_property right = &f; int_property width; int_property height; // class 'rectangle' does not have any field named 'width' // class 'rectangle' does not have any field named 'height' rectangle() : width{f}, height{&rectangle::f} {} }; &#34; 字段&#34;指向一个函数?
  • 如何为所有int_property&#34; 字段赋予价值&#34;?

2 个答案:

答案 0 :(得分:3)

int() const是一个带有 cv-qualifier 的函数类型。声明int_property top;声明一个函数,而不是一个变量。该声明与int top() const;具有相同的效果。

与其他成员函数一样,您可以通过提供函数定义来定义它们。

int rectangle::top() const {
    return 0;
}

答案 1 :(得分:0)

该论文在2015-11-10 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/作为提案#P0172R0推出。我相信您目前使用的是不支持此功能的编译器,但您可以稍后查看:)。您也可以阅读当前标准http://open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3797.pdf,或者至少检查编译器当前支持的功能。