Boost::pfr - 从元组设置结构成员

问题描述 投票:0回答:1

我正在学习 C++ 中的反射,并遇到了 boost::pfr 库。 我想知道 - 是否可以从元组中设置每个结构字段?我尝试了这种方法,但出现错误:

no matching function for call to 'get'
。我可能会错过什么?

看这个例子: https://godbolt.org/z/4bhGzcKdv

struct MyStruct
{
    int i_{};
    bool b_{};
    std::string s_;
};

MyStruct makeStructFromTuple(auto& tuple)
{
    MyStruct s;
    boost::pfr::for_each_field(s, [&](auto& field, std::size_t index){
                                  // error is here
                                   field = boost::pfr::get<index>(tuple);
                                    //   field = std::get<index>(tuple);
                               });
    return s;
}

int main()
{
    std::tuple<int, bool, std::string> tuple = std::make_tuple(1, true, "str");

    auto s = makeStructFromTuple(tuple);

    std::cout << "MyStruct: " << s.i_ << s.b_ << s.s_;
}
c++ boost reflection
1个回答
0
投票

您不能使用运行时变量索引作为编译时参数来获取。所以你的最小可重现的例子是这样的

#include <tuple>

int main()
{
    std::size_t index{1ul};
    std::tuple<int,int,int> t{1,2,3};
    auto value = t.get<index>(); // index is a runtime variable and cannot be used as template argument
}

编译器将给出完全相同的错误:请参阅https://godbolt.org/z/7TWT7nc5b

© www.soinside.com 2019 - 2024. All rights reserved.