为什么我不能访问这个自定义类型与boost :: variant? [英] Why can't I visit this custom type with boost::variant?
本文介绍了为什么我不能访问这个自定义类型与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.Variant在BoundedTypes的地方。 A以前是
I originally just tried using a very simple A but I was trying to satisfy every requirement Boost.Variant places on BoundedTypes. A used to be
struct A {};
访问者使用字符串值正常工作,但甚至无法编译访问A的尝试。 'm使用gcc-4.4.5。任何想法?
The visitor works fine with the string value but can't even compile the attempt to visit A. I'm using gcc-4.4.5. Any ideas?
推荐答案
message_t a(A());
有最麻烦的解析问题:声明一个函数而不是创建一个变量。许多方法来解决,例如。 message_t a = A();
Has the most-vexing-parse problem: declares a function rather than creates a variable. Many ways to resolve, e.g. message_t a = A();
这篇关于为什么我不能访问这个自定义类型与boost :: variant?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文