为什么我不能使用 boost::variant 访问此自定义类型?
Why can't I visit this custom type with boost::variant?
以下代码:
#include <boost/variant.hpp>
#include <iostream>
#include <string>
struct A
{
A()
{
}
~A() throw()
{
}
A& operator=(A const & rhs)
{
return *this;
}
bool operator==(A const & rhs)
{
return true;
}
bool operator<(A const & rhs)
{
return false;
}
};
std::ostream & operator<<(std::ostream & os, A const & rhs)
{
os << "A";
return os;
}
typedef boost::variant<int, std::string, A> message_t;
struct dispatcher_t : boost::static_visitor<>
{
template <typename T>
void operator()(T const & t) const
{
std::cout << t << std::endl;
}
};
int main(int argc, char * const * argv)
{
message_t m("hi");
boost::apply_visitor(dispatcher_t(), m);
message_t a(A());
boost::apply_visitor(dispatcher_t(), a);
}
产生以下错误。
In file included from /usr/include/boost/variant/apply_visitor.hpp:17,
from /usr/include/boost/variant.hpp:24,
from main.cpp:2:
/usr/include/boost/variant/detail/apply_visitor_unary.hpp: In function ‘typename Visitor::result_type boost::apply_visitor(const Visitor&, Visitable&) [with Visitor = dispatcher_t, Visitable = message_t(A (*)())]’:
main.cpp:51: instantiated from here
/usr/include/boost/variant/detail/apply_visitor_unary.hpp:72: error: request for member ‘apply_visitor’ in ‘visitable’, which is of non-class type ‘message_t(A (*)())’
/usr/include/boost/variant/detail/apply_visitor_unary.hpp:72: error: return-statement with a value, in function returning 'void'
我最初只是尝试使用一个非常简单的a,但我试图满足每个需求Boost。变量放置在BoundedTypes上。A曾经是
struct A {};
访问者可以很好地处理字符串值,但甚至无法编译访问A的尝试。我使用的是gcc-4.4.5。有什么想法吗?
message_t a(A());
有一个最麻烦的解析问题:声明一个函数而不是创建一个变量。许多解决方法,例如message_t a = A();
相关文章:
- 如何正确实现和访问运算符的各种自定义枚举器
- 在C++中循环访问自定义结构列表的小问题
- 循环访问自定义双链表
- 威纳派读取自定义文件或文件夹的所有访问权限
- 通过Overloading Operator []访问自定义数组包装器中的元素
- 访问自定义OP的输入值时的segmenation故障
- 如何从回调方法访问自定义类成员
- GPUMAT-访问自定义内核中的2个通道浮点数据
- 具有各种访问方法的自定义数据结构
- Qt/VTK:访问自定义交互器类中的函数
- 使用自定义模式进行序列化,并使用Boost进行随机访问
- Windows安装程序,在C++中访问自定义操作中的自定义属性
- 访问自定义wxPanel中的子项
- 循环访问自定义分类对象的列表
- 循环访问自定义类的列表
- 无需重新启动即可访问自定义环境变量(使用C++)
- 如何定义和访问自定义迭代器
- 当单击视图中的项时,从另一个小部件访问自定义模型数据
- FBX SDK访问自定义属性
- 分段错误,访问自定义的 gsoap 标头