相关疑难解决方法(0)

带有强类型枚举的模板参数推导

如果我有一个普通(弱)枚举,我可以使用它的枚举值作为非类型模板参数,如下所示:

enum { Cat, Dog, Horse };

template <int Val, typename T> bool magic(T &t)
{
    return magical_traits<Val>::invoke(t);
}
Run Code Online (Sandbox Code Playgroud)

并称之为: magic<Cat>(t)

据我所知,如果我有一个强类型的枚举,并且不想硬编码枚举类型,我最终得到:

enum class Animal { Cat, Dog, Horse };

template <typename EnumClass, EnumClass EnumVal, typename T> bool magic(T &t)
{
    return magical_traits<EnumVal>::invoke(t);
}
Run Code Online (Sandbox Code Playgroud)

现在我得写:magic<Animal, Animal::Cat>(t)这似乎是多余的.

有没有办法避免输入枚举类和值,缺少

#define MAGIC(E, T) (magic<decltype(E), E>(T));
Run Code Online (Sandbox Code Playgroud)

c++ templates strong-typing template-argument-deduction c++17

23
推荐指数
2
解决办法
1万
查看次数