«templates» etiketlenmiş sorular

Şablonlar etiketi birden çok bağlamda kullanılır: genel programlama (özellikle C ++) ve şablon motorları kullanarak veri / belge oluşturma. Bu etiketi uygulamada yoğun sorularda kullanırken - uygulamanın yazıldığı kod dilini etiketleyin.


1
Clang kodu derlemez ancak gcc ve msvc derledi
Sorunun ne olduğunu anlamıyorum: kodumda veya derleyicide (daha az mümkün). Bunun gibi bir kod parçası var: #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 {}; int …

2
Bir nesnenin integral olup olmadığını veya sınıf tipi olup olmadığını bilmenin anlamı nedir?
Merhaba Cppreference.com'da böyle birçok örnek gördüm: std::is_class<T> std::is_integral Ve bunun gibi. Örneğin ben olsun trueveya kodu çalıştırmak olmadığını biliyorum false. Fakat bunun anlamı nedir? örneğin, nesnenin sınıf tipinde olup olmadığını bilmek? #include <iostream> #include <type_traits> struct A {}; class B {}; enum class C {}; int main() { std::cout << …
14 c++  templates 

3
Const ref alan işaretçiden üyeye işlev için şablon işlevi çalışmıyor
Son zamanlarda bazı kod tekrarlarını çözmek için bir şablon fonksiyonu yazdım. Şöyle görünüyor: 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 

1
Şablon sınıfındaki yapıda C ++ derleyici sorunu
Aşağıdaki kod yok değil gcc veya clang derlemek. template<class T> class foo{}; template<class T> class template_class_with_struct { void my_method() { if(this->b.foo < 1); }; struct bar { long foo; } b; }; Hata mesajı: error: type/value mismatch at argument 1 in template parameter list for 'template<class T> class foo' 8 …

3
İşlev şablonunun içindeki işlevi yalnızca işlevi tanımlanmış olan türler için yürüt
Ben girdi olarak birçok farklı türde alır bir işlev şablonu var. Bu tiplerden sadece bir tanesinin bir getInt()işlevi vardır. Bu nedenle, kodun yalnızca bu tür için işlevi çalıştırmasını istiyorum. Lütfen bir çözüm önerin. Teşekkürler #include <type_traits> #include <typeinfo> class X { public: int getInt(){ return 9; } }; class Y{ …

6
C ++ 'daki genel yapıları nasıl karşılaştırabilirim?
Yapıları genel bir şekilde karşılaştırmak istiyorum ve böyle bir şey yaptım (asıl kaynağı paylaşamıyorum, bu yüzden gerekirse daha fazla ayrıntı isteyin): 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; } İki yapı örneği aynı üyeye sahip …

2
lambda'da static_assert ile constexpr varsa, hangi derleyici doğrudur?
Biz kullanmak istediğinizde static_assertbir de if constexprbazı şablon parametresine durum bağımlı yapmak zorundadır. İlginç bir şekilde, gcc ve clang, kod bir lambda içine sarıldığında katılmıyor. Aşağıdaki kod gcc ile derlenir, ancak clang if constexprdoğru olamazsa bile iddiayı tetikler . #include <utility> template<typename T> constexpr std::false_type False; template<typename T> void foo() …

1
Şablon sınıfında C ++ 20 sınıf dışı tanım
C ++ C ++ 20 standardına kadar, bir şablon sınıfının bazı özel üyelerini kullanan sınıf dışı bir operatör tanımlamak istediğimizde, buna benzer bir yapı kullanırdık: template <typename T> class Foo; template <typename T> constexpr bool operator==(T lhs, const Foo<T>& rhs); template <typename T> class Foo { public: constexpr Foo(T k) …
12 c++  templates  c++20 

2
Bir kavramın bir işleve aktarılması
Kavramlar derleme zamanı tahminleri olarak tanımlandığından, bu tahminleri derleme zamanı algoritmaları için yeniden kullanmak da mümkün müdür? Örneğin, bir demet içindeki tüm tiplerin bir konsepte uygun olup olmadığını kontrol etmek mümkün müdür? Gördüğüm kadarıyla, bir kavramı bir işleve herhangi bir şekilde aktarmak mümkün değil, bu da beni bu durumlar için …

1
Neden bu kodun g ++ ile derlenmesi çok uzun sürüyor?
Aşağıdaki kodu göz önünde bulundurun: template<int i> class A { typedef A<i-1> B; B x, y; }; template<> class A<0> { char m; }; int main() { A<LEVEL> a; } Aşağıdaki Bash komutuyla derlemesini g ++ ile karşılaştırırken (g ++ 8.3.0 ile) for ((level=1; level<30; ++level)); do echo -n ${level}, …

1
Değişken bir şablon, şablon şablonu argümanı olarak iletilebilir mi?
Aşağıdaki saçma örnek derlenmez, ancak şablon şablonu bağımsız değişkeni olarak bir değişken şablonu geçirmenin başka bir yolu var mı? 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>(); } Derleyici Gezgini'ni deneyin

2
C ++ şablon şablonu bağımsız değişken türleri kesinti
Ben bulur ve dizeleri konteyner üzerinde gidiyor gibi bir desen maçlar yazdırır kodu var. Baskı işlevi gerçekleştirilir foo şablonlu edilir Kod #include <iostream> #include <algorithm> #include <iterator> #include <vector> #include <string> #include <tuple> #include <utility> template<typename Iterator, template<typename> class Container> void foo(Iterator first, Container<std::pair<Iterator, Iterator>> const &findings) { for (auto …

1
Şablon şablonu sınıfıyla GCC / C ++ 17'de sorun
Aşağıdaki aşırı yüklenmeleri göz önünde bulundurun template<typename T> bool test() { return true; } template<template<typename ...> class T> bool test() { return false; } Birincisi normal sınıflar için, ikincisi ise örneklenmemiş şablonlar için çalışır. Örneğin: std::cout<<test<int>()<<std::endl; <-- this yields 1 std::cout<<test<std::list>()<<std::endl; <--this yields 0 Şimdi aşağıdaki şablon işlevini göz önünde …
10 c++  templates  gcc  clang  c++17 


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.