ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

使用Boost C Phoenix用户定义的参数的下标operator []错误

2019-09-01 05:17:25  阅读:230  来源: 互联网

标签: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占位符参数支持下标运算符?

解决方法:

只是摆脱演员部分,它工作正常:

#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,templates,boost,boost-phoenix,boost-proto
来源: https://codeday.me/bug/20190901/1780970.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有