Operator member_function_pointer_type(),不带类型定义

operator member_function_pointer_type() without typedef?

本文关键字:类型 定义 member function pointer type Operator      更新时间:2023-10-16

是否可以使operator member_function_pointer_type()不使用typedefs(即通过内联指定成员函数指针的类型)?

例如,在实现安全Bool习语时:

class Foo
{
    typedef void (Foo::*bool_type)() const;
public:
    operator bool_type() const;
};

是否可以在声明操作符时直接写出bool_type的类型?如果有,怎么做?

似乎这是唯一一种不能声明(类型转换)operator而不使用typedef的情况。

如果它是另一个函数名称或另一个operator x,那么它工作正常:

class Foo 
{
    typedef void (Foo::*bool_type)() const;
public:
    operator bool_type() const;
// other syntax
    void (Foo::* some_func () const) () const;  // ok! named function
    void (Foo::* operator * () const) () const;  // ok! operator *
    void (Foo::* operator () const) () const;  // error! typecasting operator
};

演示。