gpt4 book ai didi

C++ 映射模板派生类

转载 作者:行者123 更新时间:2023-11-28 02:42:56 24 4
gpt4 key购买 nike

您好,我有以下结构和数据类型:

enum EWorkerType
{
WorkerType1,
WorkerType2,
LastWorker
};

template<class DerivedType>
struct CHandlerMethod
{
};

struct CFunctorA : public CHandlerMethod<CFunctorA>
{
};
struct CFunctorB : public CHandlerMethod<CFunctorB>
{
};

template<class TFunctor>
struct CWorkerHandler
{
CHandlerMethod<TFunctor>* m_HandlerMethod;
};

typedef std::vector<CWorkerHandler<CFunctorA>*> WorkerA;
typedef std::vector<CWorkerHandler<CFunctorB>*> WorkerB;

我需要一个方向来创建 EWorkerType::WorkerType1 到 WorkerA 和 EWorkerType::WorkerType2 到 WorkerB 之间的常量映射。

我试过这个方向

struct WorkersMapping
{
WorkersMapping()
{
m_WorkersMapper.insert(EWorkerType::WorkerType2, CFunctorA::value_type());
}
static std::map<EWorkerType, ???> m_WorkersMapper;
};
static WorkersMapping m_WorkersMapping;

最佳答案

你可以使用类似的东西(编译时):

template <EWorkerType> struct WorkersMapping;

template <> struct WorkersMapping<WorkerType1>
{
using type = WorkerA;
};

template <> struct WorkersMapping<WorkerType2>
{
using type = WorkerB;
};

或者如果您的 enum 值被正确选择,类似于:

template <EWorkerType E> struct WorkersMapping
{
using type = typename std::tuple_element<E, std::tuple<WorkerA, WorkerB>>::type;
};

关于C++ 映射模板派生类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25340424/

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