Как изменить boost :: apply_visitor для возврата значения?

Я пытаюсь использовать boost :: option и boost :: apply_visitor. Это уже работает, за исключением случаев, когда я пытаюсь заставить функции Vistor возвращать (булево) значение. Я видел много примеров того, как 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 ();
}

1

Решение

Я сам нашел решение, сравнив его с другими примерами. Вы должны изменить не только функции (A), но также объявление Static_visitor (B)

  • (А) BOOL Оператор () (двойной& valueFloat) const
  • (B) класс CnVisitorReturn: публичное повышение :: 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 ();
}
5

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector