Are there cases where a typedef is absolutely necessary?

后端 未结 8 1150
爱一瞬间的悲伤
爱一瞬间的悲伤 2021-02-05 01:21

Consider the following excerpt from the safe bool idiom:

typedef void (Testable::*bool_type)() const;
operator bool_type() const;

Is it possibl

相关标签:
8条回答
  • 2021-02-05 02:02

    Answering the "Are there cases where a typedef is absolutely necessary?" from the question title, here is one example of where a typedef is needed:

    f(unsigned char());   // compiler error!
    typedef unsigned char Byte;
    f(Byte());            // fine!
    

    See the results here: http://ideone.com/JPUra

    0 讨论(0)
  • 2021-02-05 02:11

    Ah, I just remembered the identity meta-function. It is possible to write

    operator typename identity<void (Testable::*)() const>::type() const;
    

    with the following definition of identity:

    template <typename T>
    struct identity
    {
        typedef T type;
    };
    

    You could argue that identity still uses a typedef, but this solution is "good" enough for me.

    0 讨论(0)
提交回复
热议问题