我可以使用具有std::vector的结构类型'opt‘的“std::vector”吗?std::vector是用结构类型A实例化的,如下所示。
只是想知道是否允许这样做,还是我在试图使用BOOST_FUSION_ADAPT_STRUCT时犯了一些错误,在下面的用例中使用包含std::vector的结构?
struct NameValue
{
NameValue(const std::string& _e) :e(_e)
{};
std::string e;
};
struct A
{
std::string name;
boost::optional<bool> value;
std::string path;
std::string type;
};
BOOST_FUSION_ADAPT_STRUCT(A,
(std::string, name)
(boost::optional<bool>, value))
(std::string, path)
(std::string, type))
struct opt : public NameValue
{
opt() : NameValue("One")
{};
std::vector<A> s;
};
BOOST_FUSION_ADAPT_STRUCT(opt,
(std::vector<A>, s))发布于 2021-12-17 15:13:41
你当然可以。宏不能很好地处理复杂的标记,所以添加parens。
请注意,您不必再在C++11中指定类型。
住在Coliru
#include <boost/fusion/adapted.hpp>
#include <boost/fusion/include/io.hpp>
#include <boost/optional.hpp>
#include <boost/optional/optional_io.hpp>
#include <string>
#include <vector>
namespace MyLib {
struct A {
std::string name;
boost::optional<bool> value;
std::string path;
std::string type;
};
struct NameValue {
NameValue(std::string e) : e(std::move(e)){};
std::string e;
};
struct opt : public NameValue {
opt() : NameValue("One"){};
std::vector<A> s;
};
using boost::fusion::operator<<;
} // namespace MyLib
BOOST_FUSION_ADAPT_STRUCT(MyLib::A, name, value, path, type)
BOOST_FUSION_ADAPT_STRUCT(MyLib::opt, s)
#include <iostream>
int main() {
std::cout << std::boolalpha;
MyLib::opt o;
o.s = {
{"name1", true, "path1", "type1"},
{"name2", boost::none, "path2", "type2"},
{"name3", false, "path3", "type3"},
};
for (auto& el : o.s) {
std::cout << el << "\n";
}
}打印
(name1 true path1 type1)
(name2 -- path2 type2)
(name3 false path3 type3)https://stackoverflow.com/questions/70391871
复制相似问题