如何使用 std::reference_wrapper<T>::operator()
How to use std::reference_wrapper<T>::operator()
我想使用与 std::reference_wrapper<T>::get
“相同”的 std::reference_wrapper<T>::operator()
,但是在 operator()
之后 example 失败
#include <cstdint>
#include <functional>
class Foo {
public:
void Print() {
std::printf("Foo\n");
}
};
class Bar {
public:
Bar(Foo &foo): wrapper{foo} {}
void Print() {
wrapper.get().Print(); // OK
// wrapper().Print(); // FAIL
}
private:
std::reference_wrapper<Foo> wrapper;
};
int main() {
Foo foo{};
Bar bar{foo};
bar.Print();
return 0;
}
这可能吗?我的误会在哪里?
感谢您的帮助
兹拉坦
std::reference_wrapper
的 operator()
与 .get()
.
不同
它的 operator()
调用一个函数或其他 Callable 存储的引用引用的对象。
在您的示例中,Foo
对象不是 Callable。如果 Print
改为 operator()
,那么您可以简单地用
调用它
wrapper();
Is this possible? Where is my misunderstanding?
没有。 std::reference_wrapper<T>::operator()
仅在 T::operator()
存在时存在,它只是调用它,转发提供的参数。
你是不是把它误认为是 std::reference_wrapper<T>::operator T&
?
class Bar {
public:
Bar(Foo &foo): wrapper{foo} {}
void Print() {
Foo & f = wrapper;
f.Print()
}
private:
std::reference_wrapper<Foo> wrapper;
};
我想使用与 std::reference_wrapper<T>::get
“相同”的 std::reference_wrapper<T>::operator()
,但是在 operator()
#include <cstdint>
#include <functional>
class Foo {
public:
void Print() {
std::printf("Foo\n");
}
};
class Bar {
public:
Bar(Foo &foo): wrapper{foo} {}
void Print() {
wrapper.get().Print(); // OK
// wrapper().Print(); // FAIL
}
private:
std::reference_wrapper<Foo> wrapper;
};
int main() {
Foo foo{};
Bar bar{foo};
bar.Print();
return 0;
}
这可能吗?我的误会在哪里?
感谢您的帮助
兹拉坦
std::reference_wrapper
的 operator()
与 .get()
.
它的 operator()
调用一个函数或其他 Callable 存储的引用引用的对象。
在您的示例中,Foo
对象不是 Callable。如果 Print
改为 operator()
,那么您可以简单地用
wrapper();
Is this possible? Where is my misunderstanding?
没有。 std::reference_wrapper<T>::operator()
仅在 T::operator()
存在时存在,它只是调用它,转发提供的参数。
你是不是把它误认为是 std::reference_wrapper<T>::operator T&
?
class Bar {
public:
Bar(Foo &foo): wrapper{foo} {}
void Print() {
Foo & f = wrapper;
f.Print()
}
private:
std::reference_wrapper<Foo> wrapper;
};