c++ - Boost C++ Phoenix 用户定义参数的下标运算符 [] 错误

标签 c++ templates boost boost-phoenix boost-proto

使用现有的 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';
}

<子> Online demo

关于c++ - Boost C++ Phoenix 用户定义参数的下标运算符 [] 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15397899/

相关文章:

c++ - 删除动态数组时会发生什么?

c++ - 无法访问模板基类中的变量

c++ - 如何使用 boost::function 参数将 lambda 传递给重写方法?

c++ - 一旦你采用了 boost 的智能指针,有没有使用原始指针的情况?

c++ - 在 Release模式下 cout 不打印任何内容

android - 在 android 上触摸返回按钮时如何移动到 cocos2d-x 中的另一个场景

c++ - 错误消息 "undefined reference to template function passed as template parameter"

c++ - 分离 C++ 模板函数的声明和定义的正确格式

c++ - 为什么 boost::any 禁止转发 const&&?

c++ - 无法从 tbb 绕过 parallel_for