Как я могу использовать пакет параметров и функцию шаблона для различения безымянных структур?C++

Программы на C++. Форум разработчиков
Anonymous
Как я могу использовать пакет параметров и функцию шаблона для различения безымянных структур?

Сообщение Anonymous »

Я написал концепцию C++20 myrequirement:

Код: Выделить всё

template
concept myrequirement= requires(T s)
{
{ s.type() } -> std::same_as;
};

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();
Я подумал, что смогу использовать параметры пакета C++, чтобы написать что-то вроде этого:

Код: Выделить всё

template
constexpr auto& get_instance_amongst(const StructTypes&... structs)
{
// how do we do this ?
}

template
constexpr auto& get_instance()
{
return get_instance_amongst(foo, bar, baz);
}
Я перепробовал довольно много кода, но ничего не компилируется...
Возможно ли что-нибудь близкое к этому? Может быть, с выражением сгиба?


Подробнее здесь: https://stackoverflow.com/questions/794 ... named-stru

Вернуться в «C++»