Dyikot
@Dyikot

Ошибка в вариативном шаблоне. Что не так?

T Deserialize(std::istream& stream, auto... properties)
{
	T object = {};
	auto FillObject = [&object, &stream] (auto property)
	{
		stream >> object.*property;
	};

	FillObject(properties...);
	return object;
};

Error: C3889 call to object of class type 'Sgl::PPLSerializer::Deserialize::': no matching call operator found.
  • Вопрос задан
  • 77 просмотров
Решения вопроса 1
@Mercury13
Программист на «си с крестами» и не только
#include <iostream>
#include <string>

struct T {
    int x;
    std::string y;
};

T Deserialize(std::istream& stream, auto T::*... properties)
{
    T object = {};
    auto FillObject = [&object, &stream] (auto property)
    {
        stream >> object.*property;
    };

    (FillObject(properties), ...);
    return object;
};

int main()
{
    T r = Deserialize(std::cin, &T::x, &T::y);
    std::cout << "<" << r.x << "> <" << r.y << ">" "\n";
    return 0;
}

Что сделано: исправлен вызов FillObject (важно), уточнён тип properties (лучше).
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы