gpt4 book ai didi

C++ 函数,接受枚举并返回要在模板中使用的 typedef 类类型?

转载 作者:行者123 更新时间:2023-11-30 00:53:02 24 4
gpt4 key购买 nike

是否可以编写(内联?)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++ 函数,接受枚举并返回要在模板中使用的 typedef 类类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17581874/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com