Я ввожу массив строк в функцию, чтобы оценить вывод с вектором одинаковой длины. Основной причиной этого является то, что структурированные привязки могут использоваться на выходе следующим образом:
#include <vector>
#include <array>
#include <string>
template <std::size_t N>
void get_array_vals_impl(std::string(&& valueNames)[N], std::vector<std::array<std::string, N>>& results)
{
// populates results. Passed in as param as it is called recursively iterating over a directory
}
template <std::size_t N>
std::vector<std::array<std::string, N>> get_array_vals(std::string(&& valueNames)[N])
{
std::vector<std::array<std::string, N>> res;
get_array_vals_impl(valueNames, res);
return res;
}
template <std::size_t N>
std::vector<std::array<std::string, N>> get_array_vals(std::string(&valueNames)[N])
{
return get_array_vals(valueNames);
}
int main()
{
using namespace std::string_literals;
auto res1 = get_array_vals({ "test"s, "second_arg"s });
for (auto const& [first, second] : res1)
{
// use first and second accordingly. compile-time errors if structured binding length
// doesn't match the length of the input arguments.
}
std::string another_test[] = { "hi", "hello" };
auto res2 = get_array_vals(another_test); // also works fine
}
Однако, когда я пытаюсь использовать std :: array в качестве входных данных, происходит сбой с no instance of overloaded function "get_array_vals" matches the argument list
. почему в этом случае нельзя оценить std::array<std::string, 2>
? Мне действительно нужно добавить еще одну перегрузку для этого экземпляра?