【发布时间】:2017-04-28 09:20:50
【问题描述】:
我在我的项目中经常使用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;
}
在我看来,它听起来很完美,但它无法编译。我的编译器说 expression will not yield a function that takes one 1 argument 某处内幕。
我们做错了什么?
【问题讨论】:
标签: c++ templates boost visitor-pattern boost-variant