gpt4 book ai didi

c++ - 获取 [枚举成员?] 的封闭类型

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

struct class1
{
enum res
{
a = 9,
b = 15
};

class1(res e) { }
};

struct class2
{
enum res
{
he = 5,
de = 2
};

class2(res e) {}
};

template<typename T, typename E>
void fn(E e)
{
foo(T(e));
}

这个函数有效,我可以像fn<class2>(class2::he));那样调用它例如,但我不想明确指定 class2两次。

有没有办法根据 class2::he 推导出类型“class2”? ?

最佳答案

如何定义一些辅助元函数来获取您想要的类型?

#include <type_traits>

struct class1
{
enum res
{
a = 9,
b = 15
};

class1(res e) { }
};

struct class2
{
enum res
{
he = 5,
de = 2
};

class2(res e) {}
};

auto get_enclosing_type(class1::res) -> class1;
auto get_enclosing_type(class2::res) -> class2;

template <typename T>
using get_enclosing_type_t = decltype(get_enclosing_type(std::declval<T>()));

template<typename E>
void fn(E const e)
{
using type = get_enclosing_type_t<E>;
foo(type {e});
}

关于c++ - 获取 [枚举成员?] 的封闭类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37689877/

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