"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como posso acessar os tipos de argumento de um ponteiro de função dentro de uma classe de modelo variada?

Como posso acessar os tipos de argumento de um ponteiro de função dentro de uma classe de modelo variada?

Publicado em 2024-11-21
Navegar:670

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

Acessando tipos de argumentos de ponteiro de função na classe de modelo variável

Este problema surge de uma consulta anterior sobre a criação de um functor genérico para funções com argumento arbitrário listas. A classe functor fornecida, Foo, permite invocar um ponteiro de função com qualquer número de argumentos. No entanto, a tarefa agora é extrair os tipos de argumento do ponteiro de função dentro do construtor Foo.

Ao definir a classe Foo, os tipos de argumento são encapsulados como ARGS... na declaração do ponteiro de função do construtor. Embora os valores dos argumentos não estejam disponíveis no momento da construção, seus tipos são acessíveis dentro do próprio ponteiro de função.

Para descobrir esses tipos de argumentos, pode-se aproveitar a classe 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;
    };
};

Dentro do construtor Foo, pode-se acessar esses tipos de argumentos usando function_traits da seguinte maneira:

template

Ao empregar function_traits, os tipos de argumento podem ser extraídos e aproveitados dentro da classe Foo, permitindo operações sofisticadas baseadas na assinatura da função.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3