C++ 为什么可以';我是否使用boost::variant访问此自定义类型?
以下代码:C++ 为什么可以';我是否使用boost::variant访问此自定义类型?,c++,visitor,boost-variant,C++,Visitor,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 c
#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);
}
我最初只是尝试使用一个非常简单的a,但我试图满足每一个需求。BoundedTypes上的变量位置。过去是
struct A {};
访问者可以很好地处理字符串值,但甚至无法编译访问A的尝试。我使用的是gcc-4.4.5。有什么想法吗
message_t a(A());
最棘手的解析问题是:声明函数而不是创建变量。解决问题的方法很多,例如
message_t a=a()
此解析问题是否与boost::variant的有界类型具有模板转换构造函数有关?@Ken:no-它与boost::variant
完全无关。对于任何类型的T
和U
,形式为ta(U())的语句
将被视为一个名为a
的函数的声明,该函数返回一个T
,取一个U
参数。谢谢你的澄清。
message_t a(A());