ConvertEnumToClassType

ConvertEnumToClassType

是否可以编写一个(内联的)C++函数,在该函数中我们接受一个枚举作为输入并返回可在模板声明中使用的类类型?

我的直觉是,由于枚举类型数量有限,应该可行吗?

enum MyEnumType { A, B, C };

class MyClassA { };
class MyCLassB { };
class MyClassB { };

template class<T>
class ATemplatedClass {
  // ...
};

NotSureWhatReturnType ConvertEnumToClassType(MyEnumType type) {
  switch (type) {
     case A: return MyClassA;
     case B: return MyClassB;
     case C: return MyClassC:
     default: throw;
  }
}

MyEnumType type = GottenSomewhere();

auto class_type = ConvertEnumToClassType(type);

ATemplatedClass<class_type> is_this_possible;

最佳答案

函数不能返回类型。您需要一个metafunction:

template <MyEnumType>
struct ConvertEnumToClassType;

template <>
struct ConvertEnumToClassType<A> {
    typedef MyClassA type;
};

template <>
struct ConvertEnumToClassType<B> {
    typedef MyClassB type;
};

// … etc.

typedef ConvertEnumToClassType<A> class_type;

ATemplatedClass<class_type> is_this_possible;

当然,这仅在编译时有效(因为自从解析模板以来)。

关于c++ - C++函数,接受枚举并返回要在模板中使用的typedef类类型?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17581874/

10-10 08:14