【发布时间】:2020-04-23 15:09:14
【问题描述】:
我有一个模板函数,它以任意大小的std::array 作为参数。大致是这样的:
template <size_t n>
void foo(const std::array<int, n>& numbers) {
for (const auto & number: numbers) {
// ... do stuff ...
}
}
我可以称之为例如像这样:
std::array<int, 2> ints = {4, 5};
foo(ints);
一切都很好。
不幸的是,我无法使用初始化列表直接调用该函数。这段代码:
foo({4, 5});
给我以下错误:
错误:没有匹配的成员函数调用“foo” 注意:候选模板被忽略:无法推断模板参数“n”有没有办法让我的函数使用初始化列表或类似的东西工作?
【问题讨论】:
-
void foo(std::initializer_list<int> numbers)? -
除此之外
foo<2>({4, 5});也可以工作。是的,丑陋,但可能会更糟。 -
@Jarod42 那么我不能再传递已经存在的数组了,可以吗?
-
@ypnos 啊是的,这行得通……谢谢。但是,如果没有专门的模板,为什么这不起作用呢?
标签: c++ templates initializer-list