С существующим аргументом Boost Phoenix (заполнитель), таким как _1
Я могу использовать оператор массива / индекс. Например, следующий отрывок будет отображать 1
,
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 поддерживать оператор индекса?
Просто избавься от actor
часть и работает нормально
#include <iostream>
#include <boost/phoenix.hpp>
int main()
{
namespace phx = boost::phoenix;
phx::expression::argument<1>::type const my_1 = {{{}}};
int arr[4] = { 1, 2, 3, 4 };
std::cout << my_1[0](arr) << '\n';
}
Других решений пока нет …