шаблоны — Ошибка оператора [] с пользовательским аргументом Boost C ++ Phoenix

С существующим аргументом 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 поддерживать оператор индекса?

3

Решение

Просто избавься от 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';
}

Онлайн демо

5

Другие решения

Других решений пока нет …