我试图确定类对象内boost :: variant的类型以执行关联的成员函数。考虑以下代码:
#include <cstdio>
#include <cassert>
#include <iostream>
#include <boost/variant.hpp>
#include <string>
using namespace std;
typedef boost::variant< string, double> Variant;
class test{
public:
void func1 (Variant V);
void func2 (string s);
void func3 (double d);
struct my_visitor : public boost::static_visitor<> {
test &my_test;
my_visitor(test &arg) : my_test(arg) {}
void operator()( string s ) { my_test.func2(s); }
void operator()( double d ) { my_test.func3(d); }
//... for each supported type
};
};
void test::func1(Variant V){
boost::apply_visitor( my_visitor(*this),V);
}
void test::func2( string s){ cout << "func3" << endl;}
void test::func3(double d){ cout << "func4" << endl;}
int main (){
test t;
Variant V = 3.1;
t.func1(V);
V = "hello";
t.func1(V);
}
问题是我需要确定成员函数中Variant的类型,以在同一对象中为该数据类型EVEN调用相关的成员函数。
最佳答案
问题不是很清楚,但是您也许正在寻找这个?
class test {
//...
struct my_visitor : public boost::static_visitor<> {
test &my_test;
my_visitor(test &arg) : my_test(arg) {}
void operator()( string s ) const { my_test.func3(s); }
void operator()( double d ) const { my_test.func4(d); }
//... for each supported type
};
//...
};
test::func1(Variant V) {
boost::apply_visitor(my_visitor(*this), V);
}
编辑在
const
中添加了operator()
限定词,以允许在my_visitor
中使用apply_visitor()
的临时字符。关于c++ - 在其他类(class)实现探访类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13602346/