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 true
atau false
. Tapi apa gunanya itu? misal mengetahui objek bertipe kelas atau tidak?
#include <iostream>
#include <type_traits>
struct A {};
class B {};
enum class C {};
int main()
{
std::cout << std::boolalpha;
std::cout << std::is_class<A>::value << '\n';
std::cout << std::is_class<B>::value << '\n';
std::cout << std::is_class<C>::value << '\n';
std::cout << std::is_class<int>::value << '\n';
}
Hasil:
true
true
false
false
Saya sudah mencari di seluruh untuk contoh nyata menggunakan ini (
is_class
,is_integral
,is_arithmetic
, ...) Tapi semua tutorial hanya menampilkan contoh harapan: hanyatrue
ataufalse
.Adakah yang bisa membantu saya dengan contoh kecil yang bermanfaat menggunakan templat ini?
std::copy
. Bagaimana jika jenisnyastd::copy
"sederhana", seperti arrayint
atauchar
? Anda akan menggunakanmemcpy
, kan? Jadi, bagaimana Anda mengatakan "Jika tipenya sederhana, gunakan memcpy, kalau tidak gunakan loop" lambat "?Jawaban:
Itu bukan untuk menulis ke konsol, itu sudah pasti.
Lebih luas Anda bertanya: apa gunanya ciri tipe?
Jawabannya adalah metaprogramming template . Sebagai contoh, saya dapat membuat spesialisasi templat yang melakukan satu hal untuk tipe integral, dan lainnya untuk tipe non-integral.
Aaron Bullman memiliki pengantar sederhana untuk mengetik ciri-ciri , seperti halnya Jacek di sini .
Menurut pendapat saya, sebagian besar penggunaan hal-hal ini akan ditemukan terkubur dalam implementasi fitur-fitur keren dan kelas-kelas dan utilitas (yaitu di perpustakaan) sebagai bagian dari mesin latar belakang yang membuat semuanya berfungsi.
Bacaan lebih lanjut:
Jawaban rightfold pada yang pertama memberikan contoh yang bagus kapan sifat berguna:
sumber
Power<T>
atau kelas templated ketika tipe argumen tidak terpisahkan katakanlah std :: string?Ini untuk pemrograman meta template. Ketika Anda tidak tahu jenis apa, pengguna akhir akan masuk ke template. Terkadang untuk melaporkan kesalahan, terkadang untuk mengkhususkan pada jenis yang diteruskan. Terkadang kombinasi.
Contoh-contoh yang terlihat di cppreference.com (mis. Https://en.cppreference.com/w/cpp/types/is_enum ) sangat disederhanakan dan hanya menunjukkan cara menggunakan sifat dengan cara yang tidak tipikal. Anda hampir tidak akan pernah menggunakan sifat-sifat ini secara langsung dalam fungsi sederhana (fungsi atau kelas non-templat).
sumber