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.

1
Clang não compila código, mas o gcc e o msvc o compilaram
Eu não entendo qual é o problema: no meu código ou no compilador (menos possível). Há um pedaço de código como este: #include <iostream> #include <type_traits> #include <set> template<typename T, typename = void> struct TestA: std::false_type {}; template<typename T> struct TestA<T, std::void_t<typename T::reverse_iterator>> : std::true_type {}; template<typename T> struct TestA<T, …


3
A função de modelo não funciona para a função ponteiro para membro que faz const ref
Ultimamente, escrevi uma função de modelo para resolver algumas repetições de código. Se parece com isso: template<class T, class R, class... Args> R call_or_throw(const std::weak_ptr<T>& ptr, const std::string& error, R (T::*fun)(Args...), Args... args) { if (auto sp = ptr.lock()) { return std::invoke(fun, *sp, args...); } else { throw std::runtime_error(error.c_str()); } …
14 c++  templates 



6
Como comparar estruturas genéricas em C ++?
Quero comparar estruturas de uma maneira genérica e fiz algo parecido com isto (não posso compartilhar a fonte real, portanto, solicite mais detalhes, se necessário): template<typename Data> bool structCmp(Data data1, Data data2) { void* dataStart1 = (std::uint8_t*)&data1; void* dataStart2 = (std::uint8_t*)&data2; return memcmp(dataStart1, dataStart2, sizeof(Data)) == 0; } Isso funciona …


1
Definição fora da classe C ++ 20 em uma classe de modelo
Até o padrão C ++ 20 do C ++, quando queríamos definir um operador fora da classe que usa alguns membros privados de uma classe de modelo, usaríamos uma construção semelhante a esta: template <typename T> class Foo; template <typename T> constexpr bool operator==(T lhs, const Foo<T>& rhs); template <typename …
12 c++  templates  c++20 

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
Um modelo de variável pode ser passado como um argumento de modelo?
O exemplo sem sentido a seguir não é compilado, mas existe outra maneira de passar um modelo de variável como argumento de modelo? template<typename T> constexpr auto zero = T{0}; template<typename T, template<typename> auto VariableTemplate> constexpr auto add_one() { return VariableTemplate<T> + T{1}; } int main() { return add_one<int, zero>(); …

2
Dedução de tipos de argumento do modelo C ++
Eu tenho um código que localiza e imprime correspondências de um padrão como passando por cima do contêiner de strings. A impressão é realizada na função foo que é templated O código #include <iostream> #include <algorithm> #include <iterator> #include <vector> #include <string> #include <tuple> #include <utility> template<typename Iterator, template<typename> class …

1
Problema no GCC / C ++ 17 com classe de modelo de modelo
Considere as 2 seguintes sobrecargas template<typename T> bool test() { return true; } template<template<typename ...> class T> bool test() { return false; } O primeiro trabalha para classes regulares, enquanto o segundo trabalha para modelos que não são instanciados. Por exemplo: std::cout<<test<int>()<<std::endl; <-- this yields 1 std::cout<<test<std::list>()<<std::endl; <--this yields 0 …
10 c++  templates  gcc  clang  c++17 


3
Por que não é necessário usar o typename para tipos dependentes no seguinte caso?
Eu tenho lido sobre como remover a referência de um tipo aqui . Dá o seguinte exemplo: #include <iostream> // std::cout #include <type_traits> // std::is_same template<class T1, class T2> void print_is_same() { std::cout << std::is_same<T1, T2>() << '\n'; } int main() { std::cout << std::boolalpha; print_is_same<int, int>(); print_is_same<int, int &>(); …

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.