Saya menggunakan Arduino dan saya ingin tahu apakah ada fungsi yang mengembalikan tipe data dari suatu variabel. Artinya, saya ingin menjalankan sesuatu seperti berikut ini:
// Note: 'typeof' is a sample function that should return the data type.
Serial.println(typeof(myVar));
Jawaban:
Dalam program C ++ biasa, Anda akan menggunakan
typeid
operator, seperti ini:Namun, itu memerlukan fitur kompiler yang disebut Informasi Jenis Runtime (RTTI). Ini dinonaktifkan di Arduino IDE, mungkin karena cenderung meningkatkan persyaratan memori runtime dari program.
Anda dapat memperoleh informasi lebih lanjut tentang biaya sumber daya di sini: /programming/579887/how-expensive-is-rtti
Kompilator C ++ dengan fitur lengkap pasti akan mendukung RTTI. Jika Anda ingin mencoba menggunakan IDE pihak ke-3 (seperti Eclipse dengan plugin Arduino) maka Anda dapat dengan mudah mengaktifkannya. Ini mungkin tidak sebanding dengan kerumitan hanya untuk itu saja.
Alternatif
Solusi yang berkinerja lebih tinggi (tetapi kurang fleksibel) akan menggunakan pendekatan kelas sifat. Ini melibatkan beberapa pemrograman meta templat yang funky:
Anda dapat menambahkan
MAKE_TYPE_INFO(..)
baris untuk jenis apa pun yang Anda inginkan, termasuk nama-nama kelas khusus. Anda kemudian dapat menggunakannya seperti ini:Apa pun yang Anda tidak mendefinisikan menggunakan
MAKE_TYPE_INFO(..)
akan muncul sebagai"unknown"
.Itu beberapa hal yang cukup canggih di sana, jadi saya tidak akan mencoba menjelaskan cara kerjanya di sini. Ada berbagai tutorial di web tentang pemrograman template C ++ jika Anda tertarik.
EDIT: Perlu dicatat bahwa
typeof
operator tidak standar C ++, tetapi didukung oleh beberapa kompiler, seperti GCC. Ini pada dasarnya setara dengandecltype
, yang muncul dalam standar C ++ 11.sumber
Saya menggunakan pendekatan bodoh sederhana ...
Ini adalah konsep polimorfisme di mana banyak fungsi dengan tipe parameter berbeda dibuat tetapi dengan nama fungsi yang sama . Selama waktu berjalan, fungsi yang cocok dengan jumlah argumen dan tipe argumen yang tepat akan dipanggil. Semoga penjelasan ini membantu.
sumber