template argument deduction with strongly-typed enumerations

前端 未结 4 1194
迷失自我
迷失自我 2020-12-13 14:11

If I have a normal (weak) enumeration, I can use its enumerated values as non-type template parameters, like so:

enum { Cat, Dog, Horse };

template 

        
4条回答
  •  南笙
    南笙 (楼主)
    2020-12-13 14:56

    You can do it like this, if you can use C++17

    #include 
    
    enum class Animal { Cat, Dog, Horse };
    
    template  
    void magic_impl()
    {
        static_assert(std::is_same_v);
        static_assert(EnumVal == Animal::Cat);
    }
    
    template 
    void magic()
    {
        magic_impl();
    }
    
    int main()
    {
        magic();
    }
    

    demo: http://coliru.stacked-crooked.com/a/9ac5095e8434c9da

提交回复
热议问题