Myo*_*yon 0 c++ templates template-variables
我想知道在编写类似以下内容时是否可以推导或忽略值模板参数的类型:
enum class MyEnum {A, B}
enum class MyOtherEnum {X, Y}
template <typename T, T value>
struct GenericStruct {};
Run Code Online (Sandbox Code Playgroud)
当使用MyGenericStruct两者时T,value必须传递 and ,但T可以从上下文中推断出来typename T = decltype(value),除非value尚未定义。template <auto value>也不工作。
有没有什么方法可以简单地编写MyGenericStruct<MyEnum::A>而不MyGenericStruct<MyEnum, MyEnum::A>使用宏?
如果可以使用C++17,则可以用作auto非类型模板参数的类型。这给了你
template <auto value>
struct GenericStruct {};
Run Code Online (Sandbox Code Playgroud)
现在,value将由其初始值设定项推导其类型,就像您声明了一个具有类型的变量一样auto,并为您提供了所需的语法,如本实例GenericStruct<MyEnum::A> foo;所示。