С существующим аргументом Boost Phoenix (placeholder), например _1
, я могу использовать оператор массива/индекса. Например, следующая выдержка отобразит 1
.Ошибка оператора с индексом [] с помощью параметра Boost C++ Phoenix, определяемого пользователем
int arr[4] = {1,2,3,4};
std::cout << _1[0](arr) << std::endl;
Однако, если определить мой собственный заполнитель аргумент:
phoenix::actor<phoenix::expression::argument<1>::type> const my_1 = {{}};
хотя она отлично работает без прикрас (следующие выдает 7):
std::cout << my_1(7) << std::endl;
, если я пытаюсь использовать (как указано выше):
std::cout << my_1[0](arr) << std::endl;
Я получаю много ошибок; в итоге, с G ++ 4.7.2, вывод аргумента шаблона не удался; с Clang 3.2, мне сказали, что функция не может вернуть тип массива.
Как я могу использовать аргумент-заполнитель Phoenix для оператора индекса?
Я вижу 'decltype (PHX :: arg_names :: _ 1)' также работает, хотя тип очевидно, 'const type'. Как ни странно, это также относится к 'decltype (phx :: arg_names :: _ 2)'. – user2023370
@ user2023370: Объявление 'phx :: arg_names :: _ 1' идентично объявлению' my_1', кроме области, в которой оно находится, поэтому я, безусловно, надеюсь, что это сработает. ; -] – ildjarn
Хорошо. Просто я обнаружил, что это не удалось: 'static_assert (std :: is_same :: type, decltype (phx :: arg_names :: _ 1)> :: value," ");' –
user2023370