c++ - 如何编写用于传递可变大小的匿名 std::array 的推导指南?
问题描述
我希望能够将std::array
可变大小的匿名传递给构造函数:
using namespace std;
template <size_t N>
struct A
{
array<string, N> const value;
A (array<string, N>&& v): value {v} {}
};
试图传递这样的匿名数组……</p>
A a { { "hello", "there" } };
这会导致以下错误(使用 clang++):
错误:没有可行的构造函数或推导指南来推导“A”的模板参数
如果我不使用模板并在定义中指定数组的大小,它可以工作:
struct A
{
array<string, 2> const value;
A (array<string, 2>&& v): value {v} {}
};
A a { { "hello", "there" } };
是否可以为这种情况编写扣除指南?如果是这样,怎么做?
如果没有,我还能如何解决这个问题?
解决方案
这适用于我在 gcc 11 上-std=c++17
:
#include <string>
#include <array>
using namespace std;
template <size_t N>
struct A
{
array<string, N> const value;
A (array<string, N>&& v): value {v} {}
};
template<typename T, size_t N>
A( T (&&) [N]) -> A<N>;
A a { { "hello", "there" } };
推荐阅读
- c - 如何在 vscode 中正确包含带有 msvc 的头文件?
- excel - 如何复制带有空白单元格的列并粘贴到新的工作表 VBA 中?
- extjs - 如何在 ExtJs 中绑定监听器?
- reactjs - i18next 适用于开发服务器,但不适用于 azure app-service
- r - 根据R中上一行或下一行的值在列中添加缺失值
- javascript - 如何创建正则表达式以过滤掉关于长度、大小写和字符类别的复杂条件很少的结果
- atom-editor - 无法在 Atom 上安装 term3。(Ubuntu)
- css - 是否可以在具有混合混合模式的动画画布后面使用静态背景?
- security - Suricata HOME_NET 配置问题(SPAN 端口)
- javascript - 使用简单的 JavaScript 从 textarea 内容发送推文并发送到 WhatsApp