5

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

例如,在实现 Safe Bool Idiom 时:

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

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

4

1 回答 1

1

似乎这是唯一不能在operator不使用 a的情况下声明 a (类型转换)的情况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
};

演示

于 2013-06-16T05:22:49.693 回答