- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
所以我有一个返回类型为 auto
的 lambda我在支持 initializer_list
的阵列方面遇到问题在这里被摧毁:
const auto foo = [](const auto& a, const auto& b, const auto& c) { return {a, b, c}; };
我将像这样使用 lambda:
auto bar = foo(1, 2, 3);
for(const auto& i : bar) cout << i << endl;
我正在从事的一项工作将所有 lambda 表达式作为单一语句作为其编码标准的一部分(请随意表达您的愤怒。)我认为我可以通过以下方式解决这个问题:
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); };
更一般地说,template argument deduction for constructors将允许你写:
const auto foo = [](const auto& a, const auto& b, const auto& c) {
return std::vector{a, b, c}; };
^-- no template parameter required
今天,您可以使用 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}; };
关于c++ - initializer_list 返回的生命周期延长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37656076/
我需要使用 initializer_list 来初始化编译时大小的类数组。我已经知道我可以使用参数包构造函数并当场初始化它,但在这种情况下我需要使用 initializer_list。如果可能,我还想
我有一个类构造函数接受一个 initializer_list 这个构造函数必须运行接受一个的父类构造函数 initializer_list>. 所以我必须将初始化列表转换为二维初始化列表。 {1, 2
这个问题在这里已经有了答案: 关闭10 年前。 Possible Duplicate: initializer_list and move semantics 环境:Linux,g++-4.7 我使
以下代码编译并运行: #include #include #include #include void ext( std::initializer_list >> myList ) {
std::vector的初始化列表构造函数具有以下形式 vector( std::initializer_list init, const Allocator& alloc = Allocator()
考虑以下代码片段... void boo(std::initializer_list l) { } template void foo(std::initializer_list l) {
我的问题是关于 std::initializer_list 之间缺乏转换当这些转换看起来很容易实现时,包含的类型或多或少是 cv 限定的类型。 考虑以下无效代码: std::initializer_l
我的图表构造函数: Graph(std::initializer_list list); 我的边缘构造函数: Edge(int out, int in); 我想通过以下方式创建我的图表: Graph
我有一些我想在编译时由需要某种程度验证的初始化列表初始化的类。 我首先尝试使用static_assert,但不会与错误“静态声明的非恒定条件”一起编译 造成此错误的最佳方法是什么? class foo
//parameter pack sum example constexpr int sum(int N= 0) { return N; } template constexpr int su
我是新来的,这是我的第一个问题。 所以,我有这个功能: std::string join(string_initializer_list p_input) const { std::strin
想问一下有没有机会补上引用功能。假设我有功能: double refce( double (&f1)(double), double in ){ return f1(in); } 而不是这样调
所以我昨天尝试开始使用 std::initializer_list 但这并不是一个巨大的成功。这是我最后的尝试之一: #include #include struct XmlState
考虑函数: template void printme(T&& t) { for (auto i : t) std::cout ({'a', 'b', 'c'})); printme(st
考虑函数: template void printme(T&& t) { for (auto i : t) std::cout ({'a', 'b', 'c'})); printme(st
我想用 std::initializer_list 初始化基类。 struct A : public std::array { // This constructor works fine A
基于这段代码 struct Foo { Foo() { cout ilist) { cout 构造函数的大括号初始化中。 相反,复制构造函数带头。 你
尝试为 Node 安装 phash-image 但出现此错误: > phash-image@3.1.0 install /Users/jong/Workspace/mgmtio/phash-image
下面对 foo 的调用是否有效? GCC 似乎对此很满意,而 Clang 为 foo 给出了“无匹配函数”错误;以及无法推断出 N 的注释。 template void foo(const int
我正在尝试使用函数模板 foo 将参数转换为 initializer_list。但是,它转换的 initializer_list 具有与输入参数不同的奇怪值。 #include #include
我是一名优秀的程序员,十分优秀!