运算符member_function_pointer_type()没有typedef?

时间:2013-06-16 05:05:12

标签: c++ syntax operator-overloading typedef member-function-pointers

是否可以在不使用typedef的情况下创建operator member_function_pointer_type()(即通过指定内联的成员函数指针的类型)?

例如,在实施Safe Bool Idiom时:

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

是否可以在声明运算符时直接写出bool_type的类型?如果是这样,怎么样?

1 个答案:

答案 0 :(得分:1)

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

如果它是另一个函数 name 或其他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
};

Demo