Pytania otagowane jako templates

Tag szablonów jest używany w wielu kontekstach: programowanie ogólne (zwłaszcza C ++) oraz generowanie danych / dokumentów przy użyciu mechanizmów szablonów. Podczas używania tego znacznika przy implementacji ciężkich pytań - oznacz język kodu, w którym napisano implementację.

4
Dlaczego std :: function nie uczestniczy w rozwiązywaniu problemów z przeciążeniem?
Wiem, że następujący kod nie zostanie skompilowany. void baz(int i) { } void baz() { } class Bar { std::function<void()> bazFn; public: Bar(std::function<void()> fun = baz) : bazFn(fun){} }; int main(int argc, char **argv) { Bar b; return 0; } Ponieważ std::functionmówi się, że nie należy rozważać rozdzielczości przeciążenia, jak …

1
Czy Clang słusznie odrzuca kod, w którym zagnieżdżona klasa szablonu klasy jest definiowana tylko poprzez specjalizacje?
Biorąc pod uwagę następujący szablon klasy: template<typename T> struct Outer { struct Inner; auto f(Inner) -> void; }; definiujemy Innerosobno dla każdej specjalizacji Outer: template<> struct Outer<int>::Inner {}; template<> struct Outer<double>::Inner {}; a następnie raz zdefiniuj funkcję członka fdla wszystkich specjalizacji Outer: auto Outer<T>::f(Inner) -> void { } ale Clang …

2
Niejednoznaczne szablony przeciążenia
Mam następujący kod szablonu #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 (array)" << std::endl; …
16 c++  templates 

3
Szablony variadic: rozwijaj argumenty w grupach
Mam funkcję, która przyjmuje dwa argumenty: template <typename T1, typename T2> void foo(T1 arg1, T2 arg2) { std::cout << arg1 << " + " << arg2 << '\n'; } I variadic, który powinien przekazywać swoje argumenty parami: template <typename... Args> void bar(Args&&... args) { static_assert(sizeof...(Args) % 2 == 0); ( …

2
Jak przekazać odwołanie do argumentu nazwa typu szablonu
Czy istnieje sposób na przekazanie odwołania jako argumentu do argumentu o nazwie szablonu? Mam na myśli, że zamiast przekazać int, na przykład przekazać referencję do int. template <typename T> struct Foo { Foo(T arg) : ptr(arg) {} T ptr; }; int main() { int* a = new int(6); Foo<decltype(a)> foo1(a); …
15 c++  templates 


1
Clang nie kompiluje kodu, ale skompilowały go gcc i msvc
Nie rozumiem, na czym polega problem: ani w moim kodzie, ani w kompilatorze (mniej możliwe). Jest taki kod: #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, std::void_t<typename T::dummy_iterator>> : std::true_type …

2
Po co wiedzieć, czy obiekt jest całką, czy nie, czy jest typem klasy, czy nie?
Witaj Widziałem wiele takich przykładów w Cppreference.com: std::is_class<T> std::is_integral I tak dalej. Wiem, że jeśli uruchomię kod, na przykład otrzymuję truelub false. Ale jaki jest w tym sens? np. wiedząc, że obiekt jest typu klasy czy nie? #include <iostream> #include <type_traits> struct A {}; class B {}; enum class C …
14 c++  templates 

3
Funkcja szablonu nie działa w przypadku pobierania wskaźnika od funkcji do elementu składowego
Ostatnio napisałem funkcję szablonu, aby rozwiązać niektóre powtórzenia kodu. To wygląda tak: 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()); } } int main() { …
14 c++  templates 


3
Wykonaj funkcję w szablonie funkcji tylko dla tych typów, dla których zdefiniowano funkcję
Mam szablon funkcji, który pobiera wiele różnych typów podczas wprowadzania. Spośród tych typów tylko jeden z nich ma getInt()funkcję. Dlatego chcę, aby kod uruchamiał funkcję tylko dla tego typu. Proszę zaproponować rozwiązanie. Dzięki #include <type_traits> #include <typeinfo> class X { public: int getInt(){ return 9; } }; class Y{ }; …

6
Jak porównać ogólne struktury w C ++?
Chcę porównać struktury w ogólny sposób i zrobiłem coś takiego (nie mogę udostępnić faktycznego źródła, więc w razie potrzeby poproś o więcej szczegółów): 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; } Działa to głównie zgodnie …

2
jeśli constexpr z static_assert w lambda, który kompilator jest poprawny?
Kiedy chcemy używać static_assertw sposób if constexprmusimy warunek zależny od jakiegoś parametru szablonu. Co ciekawe, gcc i clang nie zgadzają się, gdy kod jest zawarty w lambda. Poniższy kod kompiluje się z gcc, ale clang wyzwala aser, nawet jeśli if constexprnie może to być prawda. #include <utility> template<typename T> constexpr …

1
C ++ 20 definicja poza klasą w klasie szablonów
Aż do standardu C ++ 20 C ++, gdy chcieliśmy zdefiniować operatora spoza klasy, który korzysta z niektórych prywatnych członków klasy szablonu, używamy konstrukcji podobnej do tej: template <typename T> class Foo; template <typename T> constexpr bool operator==(T lhs, const Foo<T>& rhs); template <typename T> class Foo { public: constexpr …
12 c++  templates  c++20 

2
Przekazywanie koncepcji do funkcji
Skoro pojęcia są zdefiniowane jako predykaty czasu kompilacji, czy możliwe jest również ponowne wykorzystanie tych predykatów dla algorytmów kompilacji? Czy na przykład można sprawdzić, czy wszystkie typy w krotce są zgodne z koncepcją? O ile widziałem, nie można w żaden sposób przekazać koncepcji do funkcji, co prowadzi mnie z powrotem …

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.