Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.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++ 返回包含引用父作用域中变量的函数成员的结构_C++ - Fatal编程技术网

C++ 返回包含引用父作用域中变量的函数成员的结构

C++ 返回包含引用父作用域中变量的函数成员的结构,c++,C++,我试图实现一个函数,该函数返回一个结构,其成员函数引用父作用域中的变量 struct Scanner { int nextToken(); } Scanner test() { token = 1; return { int nextToken() { return token; } }; } 我不知道这在C++中是否可行。我是一名JavaScript开发人员,不知道如何实现这一点。关于如何引用变量令牌< />代码,返回一个结构或类,它可以提供一个

我试图实现一个函数,该函数返回一个结构,其成员函数引用父作用域中的变量

struct Scanner {
  int nextToken();
}

Scanner test() {
  token = 1;
  return {
    int nextToken() {
      return token;
    }
  };
}

我不知道这在
C++
中是否可行。我是一名JavaScript开发人员,不知道如何实现这一点。关于如何引用变量<代码>令牌< />代码,返回一个结构或类,它可以提供一个函数<代码> nExttoKe()/<代码>?/p> < p>不能在C++标准的旧版本中完成(至少不那么容易)。 更好(更简单)的方法是使用C++11的lambdas

类似这样的情况(目前尚未测试,很可能包括一些语法问题或其他错误):


它应该是
std::function nextToken(更改太小,无法进行编辑)。但是,是的,使用继承。在这种情况下,如果您使用的是C++11(您应该这样做,已经4年了:)),我会在TestScanner中以
int-nextToken()override{return 1;}
的形式编写该方法。我不确定他是否需要lambda(可能不需要),但这是javascript中最自然的做法。。。
struct Scanner {
    std::function<int()> nextToken;
};

Scanner test() {
    token = 1;
    return {
        [=](){ return token; }
    };
}
struct Scanner {
    virtual int nextToken() { return 0; }
}

struct TestScanner : public Scanner {
    virtual int nextToken() { return 1; }
}