Fde*_*deF 25 c++ lambda c++11 trailing-return-type
给出以下代码段:
struct T {};
std::function<T&(T&)> f = [](T& obj) -> T& { return obj; };
Run Code Online (Sandbox Code Playgroud)
我想知道是否可以在T&
不使用尾随返回类型语法的情况下推断出正确的lambda返回类型(即).
显然,如果我删除,-> T&
那么将发生编译时错误,推导类型将是T
.
jsb*_*jsb 24
在C++ 14中,您可以使用[](T& obj) -> decltype(auto) { return obj; }
.在这种情况下,返回类型f
是从声明的类型推导出来的obj
(即T&
在这种情况下).
Lig*_*ica 21
没有,但在C++ 14可以使用auto&
作为尾随收益型.如果它正在打字你担心,编译器升级根本不担心你,那么这主要解决了你的问题.
chr*_*zke 11
在C++ 11中,您可以使用函数std :: ref来实现您的要求:
#include <iostream>
#include <functional>
struct T {
int mI = 0;
};
int main() {
std::function<T&(T&)> foo = [](T&t) { return std::ref(t); };
T tObj;
T & tRef = foo(tObj);
tRef.mI = 42;
std::cout<<tObj.mI<<"\n"; // Returns 42
std::cout<<tRef.mI<<"\n"; // Returns 42
return 0;
}
Run Code Online (Sandbox Code Playgroud)
功能
template<class T>
std::reference_wrapper<T> std::ref(T& t)
Run Code Online (Sandbox Code Playgroud)
返回一个reference_wrapper对象,它基本上是一个包含指针的对象.此引用包装器可以隐式转换为相应的引用,请参阅cppreference.com
此外,您可以替换std::function<T&(T&)>
为auto
:
auto foo = [] (T& t) { return std::ref(t); };
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1874 次 |
最近记录: |