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 .