我在我的项目中经常使用boost::variant
。我的同事现在提出了一个想法,即传递特定的boost::static_visitor<int>
实例以定制访问类型。她有一些类似以下代码的代码:
#include <boost/variant.hpp>
#include <iostream>
typedef boost::variant<int, std::string> TVar;
struct Visitor1 : public boost::static_visitor<int> {
template<typename T>
result_type operator()(const T&) {
return 42;
}
};
struct Visitor2 : public boost::static_visitor<int> {
template<typename T>
result_type operator()(const T&) {
return 21;
}
};
int adder(const boost::static_visitor<int>& visitor, const TVar& visitable) {
return visitable.apply_visitor(visitor) + 1;
}
int main(int argc, char **args) {
Visitor1 v1;
Visitor2 v2;
TVar x;
std::cout << adder(v1, x) << std::endl;
std::cout << adder(v2, x) << std::endl;
}
我觉得这段代码看起来完全没有问题,但是它无法编译。我的编译器显示某处出现了“表达式将不产生一个接受一个参数的函数”的错误。
我们做错了什么?
auto y=boost::apply_visitor(v1)
。我该如何将y
传递给我的adder
函数呢? - Aleph0std::function<>
等擦除该类型)。 - sehe