gpt4 book ai didi

c++ - 如何修改boost::apply_visitor返回值?

转载 作者:行者123 更新时间:2023-11-30 01:12:34 26 4
gpt4 key购买 nike

我正在尝试使用 boost::variant 和 boost::apply_visitor。这已经有效,除非我试图让 Vistor 的函数返回一个( bool )值。我在 SO 上看到了很多这样做的例子,但我无法创建一个工作示例。这是我没有返回值的代码:

#include <iostream>
#include <boost/variant.hpp>
#include <string>
#include <conio.h>


class CnVisitor : public boost::static_visitor<>
{
public:
void operator()(double& valueFloat ) const
{
std::cout << (double)valueFloat;
}

void operator()(std::string& valueString ) const
{
std::cout << valueString.c_str ();
}
};


int main()
{
std::vector< boost::variant< double, std::string >> vec;

vec.push_back((double)1.423423);
vec.push_back((std::string)"some text");

CnVisitor l_Visitor;

for ( int i = 0; i < vec.size (); ++i )
{
boost::apply_visitor ( l_Visitor, vec[i] );
}

_getch ();
}

最佳答案

我自己通过与其他示例进行比较找到了解决方案。您必须不仅函数 (A) 还要修改 Static_visitor (B) 的声明

  • (A) bool operator()(double& valueFloat ) const
  • (B) 类 CnVisitorReturn : public boost::static_visitor<bool>>

显示修改后的示例:

#include <iostream>
#include <boost/variant.hpp>
#include <string>
#include <conio.h>

class CnVisitorReturn : public boost::static_visitor<bool>
{
public:
bool operator()(double& valueFloat ) const
{
std::cout << (double)valueFloat;
return true;
}

bool operator()(std::string& valueString ) const
{
std::cout << valueString.c_str ();
return true;
}
};


int main()
{
std::vector< boost::variant< double, std::string >> vec;

vec.push_back((double)1.423423);
vec.push_back(static_cast<std::string>("some text"));

CnVisitorReturn l_VisitorReturn;

for ( int i = 0; i < vec.size (); ++i )
{
bool temp = boost::apply_visitor ( l_VisitorReturn, vec[i] );
}

_getch ();
}

关于c++ - 如何修改boost::apply_visitor返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33889601/

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