У меня есть коллекция strut s, каждый из которых имеет Data_t тип члена (другие участники опущены):
Код: Выделить всё
struct A { using data_t = int; };
struct B { using data_t = double; };
struct C { using data_t = bool; };
// etc.
При компиляции, их выбор выбирается для заполнения композитного типа (также, с соответствующим элементом data_t :
Код: Выделить всё
#include
using base_t = std::tuple;
struct Foo : public base_t {
using data_t = std::tuple;
};
В настоящее время я использую cmake's Configure_file для заполнения как последовательности struct s определяющий base_t , так и сопровождающее содержимое foo :: data_t . Можно ли вместо этого вывести последнее от base_t с использованием вариальных шаблонов и/или сгиба Конструкция Foo :: data_t , вместо этого нужно только предоставить целочисленную последовательность (одинаковую длину):
Код: Выделить всё
#include
template
using helper = std:: tuple<
typename std::tuple_element_t::data_t ...
>;
struct Bar : public base_t {
using data_t = helper;
};
Это, однако, по -прежнему требует содержимого bar :: data_t быть вручную/cmake настроен (что делает его потенциально подверженным ошибкам.) Я надеялся, что соответствующим образом построенный STD: STD: : index_sequence может быть использован для заполнения шаблона Helper , но это создает ошибку для дополнения (Intel C ++ 2023.02)
Код: Выделить всё
struct Baz : public base_t {
static constexpr auto indices{std::make_index_sequence};
using data_t = helper; // error: cannot convert std::index_sequence to size_t
};
Я немного прочитал о шаблонах вариации, но не мог выяснить, как их можно применить к оператору . Я упускаю уловку?
Спасибо
Подробнее здесь:
https://stackoverflow.com/questions/794 ... uple-types