Использование кортежа в качестве параметра функции - PullRequest
0 голосов
/ 27 ноября 2018

Привет. Я пытаюсь передать кортеж в качестве параметра функции.Я не хотел бы указывать количество элементов в кортеже (я следовал этому примеру: кортеж в качестве аргумента функции )

В настоящее время не хватает того, как я могу подсчитать количество элементовв кортеж для доступа к нему с помощью std :: get

#include<tuple>
#include<iostream>

template <typename... T> void fill(std::tuple<T...> values) {
    std::cout << std::tuple_size<T...>::value << '\n';
    //std::cout << std::get<0>(values) << '\n';
    //std::cout << std::get<1>(values) << '\n';
}
int main() {
    fill(std::make_tuple(2.));
    fill(std::make_tuple(2., 5));
}

tuple_size не подходит для использования (https://en.cppreference.com/w/cpp/utility/tuple/tuple_size)

1 Ответ

0 голосов
/ 27 ноября 2018

Давайте рассмотрим пример в предоставленной ссылке:

template <class T>
void test(T t)
{
    int a[std::tuple_size<T>::value]; // can be used at compile time

    std::cout << std::tuple_size<T>::value << '\n'; // or at run time
}

int main()
{
    test(std::make_tuple(1, 2, 3.14));
}

Из этого примера (а также из самой ссылки, см., Например, второе объявление) можно сделать вывод, что аргумент шаблона дляstd::tuple_size - это тип кортеж .

Как и (в вашем случае)

std::cout << std::tuple_size<std::tuple<T...>>::value << '\n';
//                           ^^^^^^^^^^^^^^^^
//          Note: The tuple type is used here
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...