没有 typedef 的 operator member_function_pointer_type()?

Posted

技术标签:

【中文标题】没有 typedef 的 operator member_function_pointer_type()?【英文标题】:operator member_function_pointer_type() without typedef? 【发布时间】:2013-06-16 05:05:11 【问题描述】:

是否可以在不使用 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】:

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

如果它是另一个函数 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.

【讨论】:

以上是关于没有 typedef 的 operator member_function_pointer_type()?的主要内容,如果未能解决你的问题,请参考以下文章

指向成员数组的静态指针,用于安全的operator []访问

内部 typedef 根据父类而变化

c语言结构体初始化

为啥 std::vector::data() 中没有使用指针 typedef?

什么时候使用没有 typedef 的结构有意义?

C++ 类 Typedef Struct 没有命名类型