Perguntas com a marcação «templates»

A tag templates é usada em vários contextos: programação genérica (especialmente C ++) e geração de dados / documentos usando mecanismos de template. Ao usar esta tag em questões pesadas da implementação - marque o idioma do código em que a implementação está escrita.

2
Por que remove_reference não funciona em funções?
Ocorreu algo estranho ao fazer algum modelo de metaprogramação no outro dia. Basicamente, tudo se resume a essa afirmação que não (como eu esperaria) passar. static_assert(std::is_same_v<void(), std::remove_reference_t<void()&>>); No começo, pensei que estava cometendo um erro sintático ao definir uma referência de função, mas essa afirmação passa, mostrando que esse não …
38 c++  templates  types  c++17 

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> …

4
Sobrecarregando uma Função Usando Modelos
Estou tentando definir uma função usando modelos e quero que o nome do tipo seja int ou anEnum (uma enumeração específica que eu havia definido). Eu tentei o seguinte, mas falhei: template <int | anEnum T> // or <int T, anEnum T> or <int, anEnum T> bool isFunction(const T &aVariable){} …

3
Como posso criar uma maneira cartesiana de produtos de listas de tipos em C ++?
Auto-explicativo. Basicamente, digamos que eu tenha listas de tipos assim: using type_list_1 = type_list<int, somestructA>; using type_list_2 = type_list<somestructB>; using type_list_3 = type_list<double, short>; Eles podem ser um número variável de listas de tipos. Como obtenho uma lista de tipos de produto cartesiano? result = type_list< type_list<int, somestructB, double>, type_list<int, …

4
Contêiner STL com um tipo específico como argumento genérico
Existe alguma maneira que eu possa fazer uma função que pega um contêiner com um tipo específico (digamos std::string) como parâmetro void foo(const std::container<std::string> &cont) { for(std::string val: cont) { std::cout << val << std::endl; } } e chamá-lo para todos os tipos de contêiner stl como entrada? como acima? …


4
Como chamar o construtor certo de um tipo de modelo?
No código a seguir, como posso fazer com que a linha comentada funcione da mesma maneira que a linha acima dela? Gostaria de torná-lo um código genérico, que chama o construtor adequado de um modelo Type. #include <string> #include <iostream> template <typename Type> struct Class { Type data; Class(Type data) …



1
Clang está correto ao rejeitar o código no qual a classe aninhada de um modelo de classe é definida apenas por meio de especializações?
Dado o seguinte modelo de classe: template<typename T> struct Outer { struct Inner; auto f(Inner) -> void; }; definimos Innerseparadamente para cada especialização de Outer: template<> struct Outer<int>::Inner {}; template<> struct Outer<double>::Inner {}; e defina a função de membro fuma vez para todas as especializações de Outer: auto Outer<T>::f(Inner) -> …


2
Modelos de sobrecarga ambíguos
Eu tenho o seguinte código de modelo #include <vector> #include <array> #include <iostream> template<typename T1> void foo(std::vector<T1> bar) { std::cout << "GENERIC" << std::endl; } template<typename T1> void foo(std::vector<std::vector<T1>> bar) { std::cout << "SPECIFIC (vector)" << std::endl; } template<typename T1, int SIZE> void foo(std::vector<std::array<T1, SIZE>> bar) { std::cout << "SPECIFIC …
16 c++  templates 


3
Modelos variáveis: desdobrar argumentos em grupos
Eu tenho uma função que leva dois argumentos: template <typename T1, typename T2> void foo(T1 arg1, T2 arg2) { std::cout << arg1 << " + " << arg2 << '\n'; } E uma variável que deve encaminhar seus argumentos em pares: template <typename... Args> void bar(Args&&... args) { static_assert(sizeof...(Args) % …


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.