【发布时间】:2018-02-27 03:29:29
【问题描述】:
所以我在 C++11 中发现了这个奇特的东西 std::reference_wrapper,我发现它可能对未来的程序开发很有用。我玩了一会儿,我认为它可以在某些情况下替换旧的参考以获得更好的使用,直到我遇到以下错误:
#include <iostream>
#include <functional>
class testbench {
public:
int ownerid = 5;
bool camper = false;
};
class testing {
public:
testing(testbench &x);
int quack = 3;
std::reference_wrapper <testbench> camper;
};
testing::testing(testbench &x):camper(x) {
}
int main() {
testbench tempo;
testing test_a (tempo);
std::cout << test_a.camper.ownerid;
}
这会导致 gcc 出错(我使用 Code::Blocks 作为编辑器,使用 gcc 作为编译器)
'class std::reference_wrapper<testbench>' has no member named 'ownerid'
如果行
std::reference_wrapper <testbench> camper;
改为:
testbench &camper;
然后一切都按我的预期进行。
我该如何解决这个问题,还是只是我的误解 std::reference_wrapper 作为参考的一般改进?
【问题讨论】:
-
明确地投射它们。 “没有额外级别的语法间接。必须取消引用指针才能获得指向它们所引用对象的左值;
reference_wrappers有一个隐式 conversion operator 并且可以像它们包装的对象一样调用。” - source.
标签: c++ c++11 reference-wrapper