Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何编写用于传递可变大小的匿名std::数组的演绎指南?_C++_Template Argument Deduction - Fatal编程技术网

C++ 如何编写用于传递可变大小的匿名std::数组的演绎指南?

C++ 如何编写用于传递可变大小的匿名std::数组的演绎指南?,c++,template-argument-deduction,C++,Template Argument Deduction,我希望能够将大小可变的匿名std::array传递给构造函数: 使用名称空间std; 模板 结构A { 数组常量值; A(数组&&v):值{v}{} }; 正在尝试传递这样的匿名数组 A a { { "hello", "there" } }; 这将导致以下错误(使用clang++): 错误:没有可行的构造函数或演绎指南来演绎“A”的模板参数 如果我不使用模板并在定义中指定数组的大小,它将起作用: 结构A { 数组常量值; A(数组&&v):值{v}{}

我希望能够将大小可变的匿名
std::array
传递给构造函数:

使用名称空间std;
模板
结构A
{
数组常量值;
A(数组&&v):值{v}{}
};
正在尝试传递这样的匿名数组

A a { { "hello", "there" } };
这将导致以下错误(使用clang++):

错误:没有可行的构造函数或演绎指南来演绎“A”的模板参数

如果我不使用模板并在定义中指定数组的大小,它将起作用:

结构A { 数组常量值; A(数组&&v):值{v}{} }; A{{“你好”,“那里”}; 是否可以为这种情况编写一份扣除指南?如果是,怎么做?

如果没有,我还能如何解决这个问题呢?

这对我来说在GCC11上使用
-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" } };
#包括

#include

因为OP需要一个字符串数组,所以您可以完全避免推导
T
,谢谢,工作非常完美。只有一个问题:
(&&&)
中的括号为什么是必要的?出于同样的原因,为什么
int*f[4]
int(*f)[4]
是两个完全不同的东西。一个是指向整数的四个指针的数组,另一个是指向四个整数数组的指针。