Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么可以';我是否使用boost::variant访问此自定义类型?_C++_Visitor_Boost Variant - Fatal编程技术网

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());