Pertanyaan yang diberi tag «templates»

Tag templat digunakan dalam berbagai konteks: pemrograman generik (terutama C ++), dan pembuatan data / dokumen menggunakan mesin templat. Saat menggunakan tag ini pada pertanyaan-pertanyaan berat implementasi - beri tag pada bahasa kode implementasi ditulis dalam.

1
'otomatis' sebagai placeholder argumen templat untuk parameter fungsi
C ++ 20 memungkinkan penggunaan autountuk tipe parameter fungsi. Apakah itu juga memungkinkan penggunaan autosebagai placeholder argumen templat (tidak serupa, tetapi dalam semangat C ++ 17 templat <auto> dengan cara) untuk tipe parameter fungsi? Jadi kode berikut, pra C ++ 20: template<typename First, typename Second> void printPair(const std::pair<First, Second>& p) …
22 c++  templates  auto  c++20 




1
Apakah Dentang benar untuk menolak kode di mana kelas bersarang dari templat kelas didefinisikan hanya melalui spesialisasi?
Diberikan templat kelas berikut: template<typename T> struct Outer { struct Inner; auto f(Inner) -> void; }; kami mendefinisikan Innersecara terpisah untuk setiap spesialisasi Outer: template<> struct Outer<int>::Inner {}; template<> struct Outer<double>::Inner {}; dan kemudian mendefinisikan fungsi anggota fsekali untuk semua spesialisasi Outer: auto Outer<T>::f(Inner) -> void { } tapi Dentang …


2
Template Kelebihan Ambigu
Saya memiliki kode templated berikut #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)" << …
16 c++  templates 

2
Cara menyampaikan referensi ke argumen nama ketik templat
Apakah ada cara untuk melewatkan referensi sebagai argumen ke argumen tipe nama template? Maksud saya, alih-alih meneruskan int, misalnya, untuk meneruskan referensi ke 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); // ptr …
16 c++  templates 

3
Templat variadik: buka argumen dalam grup
Saya memiliki fungsi yang membutuhkan dua argumen: template <typename T1, typename T2> void foo(T1 arg1, T2 arg2) { std::cout << arg1 << " + " << arg2 << '\n'; } Dan satu variadic yang harus meneruskan argumennya secara berpasangan: template <typename... Args> void bar(Args&&... args) { static_assert(sizeof...(Args) % 2 == …


1
Dentang tidak mengkompilasi kode tetapi gcc dan msvc mengkompilasinya
Saya tidak mengerti apa masalahnya: baik dalam kode saya atau di kompiler (kurang mungkin). Ada sepotong kode seperti ini: #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>> : …

2
Apa gunanya mengetahui apakah suatu objek adalah integral atau bukan atau merupakan tipe kelas atau tidak?
Halo Saya telah melihat banyak contoh seperti ini di Cppreference.com: std::is_class<T> std::is_integral Dan seterusnya. Saya tahu jika saya menjalankan kode misalnya saya dapatkan trueatau false. Tapi apa gunanya itu? misal mengetahui objek bertipe kelas atau tidak? #include <iostream> #include <type_traits> struct A {}; class B {}; enum class C {}; …
14 c++  templates 

3
Fungsi Templat tidak berfungsi untuk fungsi rujukan pointer-ke-anggota
Akhir-akhir ini saya menulis fungsi template untuk menyelesaikan beberapa pengulangan kode. Ini terlihat seperti ini: 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 

1
Masalah penyusun C ++ dengan struct di kelas templat
Kode berikut tidak dikompilasi dengan gcc atau dentang. 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; }; Pesan kesalahan adalah error: type/value mismatch at argument 1 in template parameter list for 'template<class T> class foo' …

3
Menjalankan fungsi di dalam templat fungsi hanya untuk tipe-tipe yang memiliki fungsi yang ditentukan
Saya memiliki templat fungsi yang membutuhkan banyak jenis input. Dari tipe-tipe itu hanya satu yang memiliki getInt()fungsi. Karenanya saya ingin kode untuk menjalankan fungsi hanya untuk tipe itu. Mohon saran solusinya. Terima kasih #include <type_traits> #include <typeinfo> class X { public: int getInt(){ return 9; } }; class Y{ }; …

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.