首页 > 解决方案 > 如何编写用于传递可变大小的匿名 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" } };

是否可以为这种情况编写扣除指南?如果是这样,怎么做?
如果没有,我还能如何解决这个问题?

标签: c++template-argument-deduction

解决方案


这适用于我在 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" } };

活生生的例子


推荐阅读