template<typename T>
concept myrequirement= requires(T s)
{
{ s.type() } -> std::same_as<uint8_t>;
};
enum MyType
{
TYPE1,
TYPE2,
TYPE3,
};
struct
{
static constexpr uint8_t type() { return TYPE1;}
} foo;
struct
{
static constexpr uint8_t type() { return TYPE2;}
} bar;
struct
{
static constexpr uint8_t type() { return TYPE3;}
} baz;
我希望用户能够根据其类型字段来检索正确的未固定结构:
auto my_struct = get_instance<TYPE1>();
我以为我可以使用C ++的Pack参数来写下类似的内容:
template<uint8_t type, myrequirement... StructTypes>
constexpr auto& get_instance_amongst(const StructTypes&... structs)
{
// how do we do this ?
}
template<uint8_t type>
constexpr auto& get_instance()
{
return get_instance_amongst(foo, bar, baz);
}
我尝试了很多代码,但似乎没有任何编译...
有什么可能吗?折叠表达方式可能?In
get_instance_amongst
std::get
demo