C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – 访问增强融合图字段名称大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我一直在尝试使用一些boost融合的东西来写一个常规的c结构文件.一个 XML文件似乎是捕获数据并使其与其他工具兼容或手动编辑的好方法.似乎我几乎拥有,但似乎缺少一些基本的东西.
我正在使用与boost :: fusion快速入门页面相似的东西: http://www.boost.org/doc/libs/1_54_0/libs/fusion/doc/html/fusion/quick_start.html.作为一个附注,我已经彻底地看了这里和boost的文档,但没有人似乎正在访问字段名称.
struct print_xml
{
    template <typename T>
    void operator()(T const& X) const
    {
        std::cout
            << '<' << x.first << '>'
            << x
            << "</" << x.first << '>'
            ;
    }
};

我想使用它如下:

BOOST_FUSION_ADAPT_STRUCT(
    myStructType,(double,val1)
    (double,val2)
    (char,letter)
    (int,number)
    )    
myStructType saveMe = { 3.4,5.6,'g',9};
for_each(saveMe,print_xml());

其他时候我将结构定义如下,但还是没有运气:

namespace fields{
    struct val1;
    struct val2;
    struct letter;
    struct number;
}

typedef fusion::map<
    fusion::pair<fields::val1,double>,fusion::pair<fields::val2,fusion::pair<fields::letter,char>,fusion::pair<fields::number,int> > myStructType;

我知道没有成员第一,但它真的好像应该是为了访问字段名称代码我已经很好用X.second,但是没有完成我需要的是获取字段名称.
我该怎么办呢?
谢谢!

解决方法

#include <iostream>
#include <String>

#include <boost/mPL/range_c.hpp>
#include <boost/fusion/include/for_each.hpp>
#include <boost/fusion/include/zip.hpp>
#include <boost/fusion/include/at_c.hpp>
#include <boost/fusion/include/adapt_struct.hpp>
#include <boost/fusion/include/mpl.hpp>

namespace fusion=boost::fusion;
namespace mpl=boost::mpl;

struct  myStructType
{
    double val1;
    double val2;
    char letter;
    int number;
}; 

BOOST_FUSION_ADAPT_STRUCT(
    myStructType,number)
)   



template <typename Sequence>
struct XmlFieldNamePrinter
{
    XmlFieldNamePrinter(const Sequence& seq):seq_(seq){}
    const Sequence& seq_;
    template <typename Index>
    void operator() (Index idX) const
    {
        //use `Index::value` instead of `idx` if your compiler fails with it
        std::string field_name = fusion::extension::struct_member_name<Sequence,idx>::call();

        std::cout
            << '<' << field_name << '>'
            << fusion::at<Index>(seq_)
            << "</" << field_name << '>'
            ;
    }
};
template<typename Sequence>
void printXml(Sequence const& v)
{
    typedef mpl::range_c<unsigned,fusion::result_of::size<Sequence>::value > InDices; 
    fusion::for_each(InDices(),XmlFieldNamePrinter<Sequence>(v));
}

int main()
{
    myStructType saveMe = { 3.4,9};
    printXml(saveME);
}

大佬总结

以上是大佬教程为你收集整理的c – 访问增强融合图字段名称全部内容,希望文章能够帮你解决c – 访问增强融合图字段名称所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。