Я немного рассол, следуя моему previous question и используя код, похожий на тот, который я posted here.получение типа шаблона из лямбда-авто
- Я использую VARIADIC шаблонную функцию, которая принимает VARIADIC объекты
- Он упаковывает их в кортеж
- итерацию их с помощью
visitor
идиомы - Становится персональным для каждого объекта обратного вызова
Вместо этого первоначального приведенного ниже примера:
template <typename... Args>
void make_classes(Args... args)
{
auto t = std::tuple<Args...>(args...);
unsigned int size = std::tuple_size<decltype(t)>::value;
auto execute = [](auto & obj){ obj.operator()(); };
for (int i = 0; i < size; i++) {
visit_at(t, i, execute);
}
}
Я пытаюсь понять, как я могу вывести тип шаблона из auto
лямбды, так что я могу связать его:
template <typename... Args>
void make_classes(Args... args)
{
auto t = std::tuple<Args...>(args...);
unsigned int size = std::tuple_size<decltype(t)>::value;
auto execute = [](auto & obj){
// obtain type of obj as T?
auto callback = std::bind(&T::deserialise, obj, std::placeholders::_1);
// do something else here using this callback.
};
for (int i = 0; i < size; i++) {
visit_at(t, i, execute);
}
}
Там подвох: объекты параметров не являются копируемыми (хотя я мог бы изменить что), но я хотел бы знать, может ли/как это сделать, выведя тип шаблона, упакованный в кортеж, полученный посетителем.
Если я не могу вывести тип внутри лямбда, может я как-то магазин его в кортеж (например,:. Тип & объекта), чтобы потом извлечь его?
вам не нужно 'decltype ли (авто) '? – NathanOliver
@NathanOliver Я не знаю, как это будет работать? –
@NathanOliver кажется, что вы что-то делаете, используя 'decltype (obj' возвращает' error: type 'decltype (obj)' не может использоваться до '::', потому что у него нет членов 'с правильным типом, напечатанным в ошибка –