小编Che*_*adu的帖子

如何在 C++17 中的 std::array<std::string, N> ¶meter 中实现编译时大小扣除?

我正在尝试创建一个最终应该在编译时评估的函数。我遇到的问题是我坚持将初始值设定项列表作为参数传递并自动推断其大小。

我首先尝试创建这个对象:

using namespace std::string_literals;
int main(void)
{
    std::array test = { "Hello"s, "World"s }; // Works perfectly, deduces both std::string type and size
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我创建一个函数并传递初始化列表,我会得到以下结果:

template<size_t N>
void Test(std::array<std::string, N> &argument) { }

using namespace std::string_literals;
int main(void)
{
    Test({ "Hello"s, "World"s }); //Error: could not deduce template argument for N
}
Run Code Online (Sandbox Code Playgroud)

我认为编译器显然应该推断出列表中的元素数量并相应地生成函数定义。我的函数声明有错误吗?如果之前有人问过这个问题,请提前抱歉,c++ 词汇是不明确的......

c++ c++17

2
推荐指数
1
解决办法
69
查看次数

标签 统计

c++ ×1

c++17 ×1