gpt4 book ai didi

用于将结构类型映射到枚举的 C++ 模板?

转载 作者:太空狗 更新时间:2023-10-29 23:25:54 27 4
gpt4 key购买 nike

我有这样的东西:

struct A { ... };
struct B { ... };
struct C { ... };

class MyEnum {
public:
enum Value { a, b, c; }
}

template<typename T> MyEnum::Value StructToMyEnum();

template<>
MyEnum::Value StructToMyEnum<A>()
{
return MyEnum::a;
}

template<>
MyEnum::Value StructToMyEnum<B>()
{
return MyEnum::b;
}

我基本上想得到a直接通过调用之类的东西

StructToMyEnum<A>();

这是我能想到的最好结果,但是当我编译时我得到 multiple definition of 'MyEnum::Value StructToMyEnum<A>()'尝试链接时出错。

对于根据此示例将类型映射到枚举的最佳方式有何建议?

最佳答案

您可以在编译时将类型映射到枚举:

#include <iostream>

struct A { int n; };
struct B { double f; };
struct C { char c; };

class MyEnum
{
public:
enum Value { a, b, c };
};

template<typename T> struct StructToMyEnum {};

template<> struct StructToMyEnum<A> {enum {Value = MyEnum::a};};
template<> struct StructToMyEnum<B> {enum {Value = MyEnum::b};};
template<> struct StructToMyEnum<C> {enum {Value = MyEnum::c};};

int main (int argc, char* argv[])
{
std::cout << "A=" << StructToMyEnum<A>::Value << std::endl;
return 0;
}

关于用于将结构类型映射到枚举的 C++ 模板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4995378/

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