ฉันกำลังพยายามหาวิธีเขียนมาโครที่จะส่งทั้งการแทนค่าตัวอักษรสตริงของชื่อตัวแปรพร้อมกับตัวแปรในฟังก์ชัน
ตัวอย่างเช่นให้ฟังก์ชันต่อไปนี้
void do_something(string name, int val)
{
cout << name << ": " << val << endl;
}
ฉันต้องการเขียนมาโครดังนั้นฉันจึงสามารถทำได้:
int my_val = 5;
CALL_DO_SOMETHING(my_val);
ซึ่งจะพิมพ์ออกมา: my_val: 5
ฉันลองทำสิ่งต่อไปนี้:
#define CALL_DO_SOMETHING(VAR) do_something("VAR", VAR);
อย่างไรก็ตามอย่างที่คุณอาจเดาได้ว่า VAR ภายในเครื่องหมายคำพูดจะไม่ถูกแทนที่ แต่จะถูกส่งผ่านเป็นเพียงสตริง "VAR" ดังนั้นฉันต้องการทราบว่ามีวิธีที่จะทำให้อาร์กิวเมนต์มาโครกลายเป็นสตริงลิเทอรัลได้หรือไม่