Я делаю более или менее первые шаги с X3, и мне уже удалось проанализировать простую структуру с 2 членами. Но я не могу поместить эту структуру в вариант.
(упрощенный) код выглядит примерно так:
struct Command1
{
CommandType type;
std::string objName;
}
BOOST_FUSION_ADAPT_STRUCT(
Command1,
type, objName
);
struct Nil {};
using Command = x3::variant<Nil, Command1>;
const x3::rule<struct create_cmd_rule, Command1> ccRule = "ccRule";
const auto ccRule_def = typeRule > identifier;
const x3::rule<struct create_rule, Command> cRule = "cRule";
const auto cRule_def = x3::omit[x3::no_case["CREATE"]] > (ccRule_def);
Если я назову это так
Command1 cmd;
x3::phrase_parse(statement.cbegin(), statement.cend(), parser::cRule_def, x3::space, cmd);
все хорошо. Но если я передам свой вариант:
Command cmd;
x3::phrase_parse(statement.cbegin(), statement.cend(), parser::cRule_def, x3::space, cmd);
не компилируется:
Код серьезности Описание Состояние подавления строки файла проекта
Ошибка C2665 'boost :: spirit :: x3 :: traits :: detail :: move_to': ни одна из 4 перегрузок не может преобразовать все типы аргументов ZeusCore d: \ boost_1_67_0 \ boost \ spirit \ home \ x3 \ support \ traits \ move_to.hpp 224
Надеюсь, я не сильно упростил код ...
Я использую Boost 1.67 и новейшую версию Visual Studio 2017.