0

可以用里面写const函数吗?apply_visitor例如,此代码编译没有错误:

#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <boost/variant.hpp>
using namespace std;

typedef boost::variant<int,string> vTypeVariants;

struct vType_toN : boost::static_visitor<int>
{
    int operator()(int& i) const {
        return i;
    }
    int operator()(const string& str) const{
        return str.length();
    }
};

class vType{
public:
    vType(const int& src) : data(src){}
    vType(const std::string& src) : data(src){}

    int getLength(){
        return boost::apply_visitor(vType_toN(),data);
    }
private:
    vTypeVariants data;
};

int main(int argc, char ** argv)
{
  vType x = string("2");
  printf("L=%d",x.getLength());
  return(0);
}

除非您将 const 添加到 getLength():

int getLength() const{
        return boost::apply_visitor(vType_toN(),data);
}

在这种情况下,会出现一个带有大量描述(2 页)的错误,抱怨初始化第一个参数的问题。

所以,问题是:如何在 const 函数中使用 apply_visitor?

4

1 回答 1

1

自己发现了。在 static_visitor 类运算符定义中忘记了 int 之前的 const。也许有人会发现这很有用,因为它不容易找到(我原来的班级要大得多)。

于 2013-11-11T06:50:27.293 回答