Perguntas com a marcação «template-meta-programming»

27
Verificação por modelo da existência de uma função de membro da classe?
É possível escrever um modelo que altera o comportamento, dependendo se uma determinada função de membro é definida em uma classe? Aqui está um exemplo simples do que eu gostaria de escrever: template<class T> std::string optionalToString(T* obj) { if (FUNCTION_EXISTS(T->toString)) return obj->toString(); else return "toString not defined"; } Então, se …

20
Como você pode iterar sobre os elementos de uma std :: tuple?
Como posso iterar em uma tupla (usando C ++ 11)? Tentei o seguinte: for(int i=0; i<std::tuple_size<T...>::value; ++i) std::get<i>(my_tuple).do_sth(); mas isso não funciona: Erro 1: desculpe, não implementado: não é possível expandir 'Listener ...' em uma lista de argumentos de comprimento fixo. Erro 2: não posso aparecer em uma expressão constante. …


3
Como posso obter a profundidade de um std :: vector multidimensional em tempo de compilação?
Eu tenho uma função que tem uma std::vectordimensão multidimensional e requer que a profundidade (ou o número de dimensões) seja passada como um parâmetro de modelo. Em vez de codificar esse valor, eu gostaria de escrever uma constexprfunção que aceite std::vectore retorne a profundidade como um unsigned integervalor. Por exemplo: …

4
Meta programação
Alguém pode me explicar por que o primeiro método de meta-programação de modelos está indo para um loop infinito, mas o segundo é executado corretamente. #include <iostream> using namespace std; template<int N, int M> struct commondivs { static const int val = (N<M) ? commondivs<N,(M-N)>::val : commondivs<(N-M),M>::val; }; template<int N> …

2
Passando um conceito para uma função
Como os conceitos são definidos como predicados em tempo de compilação, também é possível realmente reutilizá-los para algoritmos em tempo de compilação? Por exemplo, seria possível verificar se todos os tipos em uma tupla estão em conformidade com um conceito? Até onde eu vi, não é possível passar um conceito …


1
Dedução de tipo incorreto ao passar o ponteiro de função sobrecarregado e seus argumentos
Estou tentando fornecer um invólucro std::invokepara deduzir o tipo de função mesmo quando a função está sobrecarregada. (Fiz uma pergunta relacionada ontem para a versão do ponteiro variável e do método). Quando a função possui um argumento, esse código (C ++ 17) funciona conforme o esperado em condições normais de …

7
É possível corresponder parâmetros de modelo inteiro recursivamente em C ++?
Eu tenho o seguinte problema. Eu defino um vetor dimensional N como #include <vector> #include <utility> #include <string> template <int N, typename T> struct NVector{ typedef std::vector<typename NVector<N-1,T>::type> type; }; template <typename T> struct NVector<1,T> { typedef std::vector<T> type; }; Desejo escrever um mapa de função de ordem superior que …


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.