gpt4 book ai didi

c++ - 使用 boost visitor 在类型之间进行转换

转载 作者:行者123 更新时间:2023-11-28 03:45:03 26 4
gpt4 key购买 nike

假设我有一个

boost::variant<std::string, int> myVariant;

在这个对象中,我从数据库中保存数据,通常是整数或文本,但有时是作为文本存储在数据库中的时间。所以我想知道我是否可以创建一个访问者,当访问带有字符串的变体对象时,返回一个类型为“tm”的结构。类似的东西:

class timeVisitor : public boost::static_visitor<boost::shared_ptr<tm> >
{
public:
boost::shared_ptr<tm> operator()(string &str) const
{
boost::shared_ptr<tm> dst(new tm());
strptime(str.c_str(), "%Y-%m-%d", dst.get());
return dst;
}
};

然后为了使用它:

boost::shared_ptr<tm> result = boost::apply_visitor( timeVisitor(), myVariant );

问题是,我不想在访问者中创建 tm 结构并弄乱一些共享指针和东西。我更喜欢将已经创建的一个提供给访问者,并在内部进行初始化。像(在使用意义上):

tm result;
int returnCode = boost::apply_visitor( timeVisitor(result), myVariant );

访问者将仅使用 strptime my result tm 结构进行初始化,如果转换为 returnCode 时出现问题,甚至会返回。有谁知道这是如何实现的?我能否以某种方式定义带有两个参数的访问者……或者其他东西?

最佳答案

您的简单示例调用应该有效。向获取引用并存储它的访问者添加一个构造函数,例如:

 tm* target;
timeVisitor( tm& a ) : target(&a) {}
int operator()(string &str) const {
strptime(str.c_str(), "%Y-%m-%d", target);
}

关于c++ - 使用 boost visitor 在类型之间进行转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7915837/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com