Get base type of a template type (remove const/reference/etc.)

后端 未结 3 1563
天涯浪人
天涯浪人 2021-02-19 09:45

Is there a type traits template which returns the base type of a given type. By base type I mean the type with all value modifiers, const, volatile, etc. strip

相关标签:
3条回答
  • 2021-02-19 10:11

    Obviously it depends on what exactly you want to remove from the type. std::decay could be what you are looking for (removes references, const/volatile, decays array to pointer and function to function pointer). If you don't want the array to pointer and function to functionpointer decay, you need to stick with std::remove_reference and std::remove_cv (removes const and volatile). Of course you could combine the two into your own typetrait to make using it easier.

    0 讨论(0)
  • 2021-02-19 10:15

    I would probaby define a type alias such as:

    template<typename T>
    using base_type = typename std::remove_cv<typename std::remove_reference<T>::type>::type;
    

    Notice, that here R. Martinho Fernandes proposes the name Unqualified for such a type alias.

    The standard type trait std::decay, on the other hand does the same as the above and something more for array and function types, which may or may not be what you want.

    0 讨论(0)
  • 2021-02-19 10:15

    try std::decay. It mimicks what happens when you pass arguments to functions by value: strips top-level cv-qualifiers, references, converts arrays to pointers and functions to function pointers.

    Regards, &rzej

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