Jon*_*Mee 6 c++ lambda return initializer-list auto
所以我有一个返回类型的lambda,auto
我在initializer_list
这里被销毁的阵列支持有问题:
const auto foo = [](const auto& a, const auto& b, const auto& c) { return {a, b, c}; };
Run Code Online (Sandbox Code Playgroud)
我会像这样使用lambda:
auto bar = foo(1, 2, 3);
for(const auto& i : bar) cout << i << endl;
Run Code Online (Sandbox Code Playgroud)
我正在工作的一项工作是编码标准的一部分,所有lambdas都是单一陈述(随意表达你的愤慨.)我认为我可以解决这个问题:
foo
一个返回类型vector int
,但这会弄乱它的通用性如何:const auto foo = [](const auto& a, const auto& b, const auto& c) -> vector<int> { return {a, b, c}; }
vector<T>
并返回它的模板化函数:template <typename T> vector<T> foo(const T& a, const T& b, const T& c){ return {a, b, c}; }
是否有可能将这些变量强制转换为容器,谁的支持不会在一行中被销毁,以便我可以保持lambda的auto
返回类型?
TS v2 的库基础知识std::experimental::make_array
肯定会满足您的要求:
#include <experimental/array>
const auto foo = [](const auto& a, const auto& b, const auto& c) {
return std::experimental::make_array(a, b, c); };
Run Code Online (Sandbox Code Playgroud)
更一般地,构造函数的模板参数推导将允许您编写:
const auto foo = [](const auto& a, const auto& b, const auto& c) {
return std::vector{a, b, c}; };
^-- no template parameter required
Run Code Online (Sandbox Code Playgroud)
今天,您可以使用以下方法来模拟common_type
:
const auto foo = [](const auto& a, const auto& b, const auto& c) {
return std::vector<std::common_type_t<decltype(a), decltype(b), decltype(c)>>{a, b, c}; };
Run Code Online (Sandbox Code Playgroud)