如何将boost::apply_visitor修改为return一个值?
How to modify boost::apply_visitor to return a value?
我正在尝试使用 boost::variant 和 boost::apply_visitor。这已经有效,除非我尝试将 Vistor 的函数设置为 return 一个(布尔)值。我在 SO 上看到了很多这样做的例子,但我无法创建一个工作示例。这是我没有 return 值的代码:
#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) class 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 ();
}
我正在尝试使用 boost::variant 和 boost::apply_visitor。这已经有效,除非我尝试将 Vistor 的函数设置为 return 一个(布尔)值。我在 SO 上看到了很多这样做的例子,但我无法创建一个工作示例。这是我没有 return 值的代码:
#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) class 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 ();
}