Apakah mungkin di c ++ untuk mendapatkan sebagai string nama variabel yang diteruskan sebagai param?
Nov 29 2020
Saya ingin bisa melakukan sesuatu seperti ini
int myVar = 3;
void logger(int param) {
std::cout << nameOf(param) << ": " << param << std::endl;
}
logger(myVar); // prints "myVar: 3"
Jawaban
4 cigien Nov 29 2020 at 19:14
Tidak, Anda belum bisa melakukan ini dalam bahasa C ++, karena tidak ada fasilitas refleksi untuk melakukannya.
Namun, Anda bisa menggunakan makro preprocessor untuk mendapatkan efek yang Anda inginkan. Perhatikan bahwa makro berbahaya, dan harus dihindari sejauh mungkin.
Pertama, tulis fungsi implementasi yang mengambil nilai parameter, dan nama parameter, seperti ini:
void logger_impl(int param, std::string param_name) {
std::cout << param_name << ": " << param << std::endl;
}
Kemudian Anda dapat menulis makro yang menghasilkan string dari nama variabel di situs panggilan, menggunakan #
(operator stringifikasi), lalu menggunakan string itu dalam panggilan ke fungsi implementasi:
#define logger(p) logger_impl(p, #p)
Berikut demo nya .
Kiat Pemilik Anjing yang Bermanfaat: Mengapa Penting untuk Membiarkan Anjing Anda Mengendus di Jalan
Jana Duggar: Semua yang Dia Katakan Tentang Cinta dan Jendela 5 Tahunnya untuk Menemukan 'Yang Satu'