Dalam program C ++ biasa, Anda akan menggunakan typeid
operator, seperti ini:
std::cout << typeid(myVar).name();
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:
// Generic catch-all implementation.
template <typename T_ty> struct TypeInfo { static const char * name; };
template <typename T_ty> const char * TypeInfo<T_ty>::name = "unknown";
// Handy macro to make querying stuff easier.
#define TYPE_NAME(var) TypeInfo< typeof(var) >::name
// Handy macro to make defining stuff easier.
#define MAKE_TYPE_INFO(type) template <> const char * TypeInfo<type>::name = #type;
// Type-specific implementations.
MAKE_TYPE_INFO( int )
MAKE_TYPE_INFO( float )
MAKE_TYPE_INFO( short )
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:
int myVar = 17;
Serial.println( TYPE_NAME(myVar) );
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 dengan decltype
, yang muncul dalam standar C ++ 11.