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]
是两个完全不同的东西。一个是指向整数的四个指针的数组,另一个是指向四个整数数组的指针。