假设我有这个模板函数:
template <typename T>
void foo(T &&t) {
std::forward<T>(t).foo();
std::forward<T>(t).bar();
std::forward<T>(t).baz();
}
Run Code Online (Sandbox Code Playgroud)
请注意,我必须std::forward对同一个变量重复多次(以确保 if Thas ref-qualified foo()// ,将调用正确的变量)bar()。baz()
有没有办法避免重复std::forward?它不仅是多余的,而且还容易出错,因为我可能会忘记std::forward在某个地方添加。
请注意,我必须对同一个变量重复 std::forward 多次(以确保如果 T 具有引用限定的 foo()/bar()/baz(),则将调用正确的变量)。
你不应该重复std::forward- 你应该只在最后一次调用中使用它:
template <typename T>
void foo(T &&t) {
t.foo();
t.bar();
std::forward<T>(t).baz();
}
Run Code Online (Sandbox Code Playgroud)
按照您编写的方式,如果实际参数是右值,则 ref-qualifiedfoo()可能会窃取 的内容t,并且后续调用将无法按预期工作。
| 归档时间: |
|
| 查看次数: |
129 次 |
| 最近记录: |