Парные шаблоны Variadic (именованные кортежи) - PullRequest
0 голосов
/ 15 февраля 2019

Я хочу создать шаблонный класс для помеченных / именованных кортежей, поскольку каждый тип кортежа связан со статическим std :: string.

При создании нового помеченного кортежа я хочу вызвать его следующим образом:

auto a = std::labeled_tuple<"key1", int, "key2", double>()

Количество строк должно соответствовать количеству предоставленных типов, и, очевидно, длина варьируется.

Синтаксически следующее неверно, но оно должно дополнительно уточнить, что я хочу:

template<typename...template<std::string STR, typename Arg> T>

И я хочу получить доступ к STR ... и T ...

Любая помощь будет оценена, спасибо.

1 Ответ

0 голосов
/ 15 февраля 2019

Вместо этого создайте «помеченные» типы:

template <const char* Name, typename T>
struct labeled_type
{
     static constexpr const char* name = Name;
     T value;
};

Затем используйте обычные std::tuple:

static constexpr const char key1[] = "key1";
static constexpr const char key2[] = "key2";

auto a = std::tuple<labeled_type<key1, int>, labeled_type<key2, double>>();

Демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...