c++ - 将枚举转换为成员变量 [问题] C++

标签 c++ templates enums

我正在尝试为结构中不同枚举值对应的不同类型的变量创建一个查找。

这是我目前的解决方案:

struct X {
    int x;
    std::string y;
    char z;
    enum class MYENUM {
        X, Y, Z
    };
    template<MYENUM TYPE>
    auto& GetAttribute() {
        if constexpr (TYPE == MYENUM::X) return x;
        else if constexpr (TYPE == MYENUM::Y) return y;
        else if constexpr (TYPE == MYENUM::Z) return z;
    }
};

我正在寻找一个更优雅的解决方案,因为在我的实际项目中,我的结构中有许多不同的变量,因此 if/else block 变得非常大。

最佳答案

可能是这样的:

template<MYENUM TYPE>
auto& GetAttribute() {
    return std::get<int(TYPE)>(std::tie(x, y, z));
}

Demo

(您实质上是在重新发明 std::tuple。)

关于c++ - 将枚举转换为成员变量 [问题] C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63552970/

相关文章:

c# - WPF XAML 在 ContentControl 中显示内容

mysql - MySQL 中的 Like 子句未按预期显示输出

C++ 初学者游戏编程 : Keeping track of objects, 库存列表、对象/字符的不同数量的数组等

python - 是否有与 f-string 语法等效的可调用函数?

c++ - 从函数返回前释放 unique_ptr

c++ - remove_reference 如何禁用模板参数推导?

swift - 将响应式(Reactive) Cocoa SignalProducer 转换为枚举

java - 在 Java 应用程序中跨层传递枚举

c++ - 是否可以在关闭语言扩展的情况下编写 windows 和 directx 代码?

c++ - constexpr 静态成员什么时候不再是 constexpr?