«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как я могу получить доступ к типам аргументов указателя функции в классе шаблона с переменным числом аргументов?

Как я могу получить доступ к типам аргументов указателя функции в классе шаблона с переменным числом аргументов?

Опубликовано 21 ноября 2024 г.
Просматривать:662

How can I access the argument types of a function pointer within a variadic template class?

Доступ к типам аргументов указателя функции в классе шаблонов Variadic

Эта проблема возникает из предыдущего запроса, касающегося создания универсального функтора для функций с произвольным аргументом списки. Данный класс-функтор Foo позволяет вызывать указатель на функцию с любым количеством аргументов. Однако теперь задача состоит в том, чтобы извлечь типы аргументов из указателя функции внутри конструктора Foo.

При определении класса Foo типы аргументов инкапсулируются как ARGS... в объявлении указателя функции конструктора. Хотя значения аргументов недоступны во время создания, их типы доступны внутри самого указателя функции.

Чтобы раскрыть эти типы аргументов, можно использовать класс function_traits:

template 
struct function_traits;  

template>
{
    // Number of arguments
    static const size_t nargs = sizeof...(Args);

    // Return type
    typedef R result_type;

    // Argument types at specified index
    template <size_t i>
    struct arg
    {
        typedef typename std::tuple_element<i, std::tuple<Args...>>::type type;
    };
};

В конструкторе Foo можно получить доступ к этим типам аргументов с помощью function_traits следующим образом:

template

Используя function_traits, типы аргументов можно извлекать и использовать внутри класса Foo, что позволяет выполнять сложные операции на основе сигнатуры функции.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3