Tôi có macro, trong đó một trong các đối số là giá trị enum, được đưa ra mà không chỉ định phạm vi không gian tên. Tuy nhiên một nơi nào đó bên trong vĩ mô tôi cần phải truy cập nó (rõ ràng tôi phải xác định không gian tên đó), nhưng tôi không thể có vẻ concat tên không gian tên với tham số mẫu. Cho samplecode sau trình biên dịch phàn nàn rằng pasting :: and Val doesnt give a valid preprocessor token
(nó hoạt động tốt cho concating get và a để getVal).Đối số Macro đối số với không gian tên
namespace TN
{
enum Info
{
Val = 0
};
}
#define TEST(a) TN::Info get ## a(){return TN::##a;}
TEST(Val)
Vậy có cách nào để làm cho công việc này mà không cần sử dụng lập luận khác và về cơ bản xác định giá trị được sử dụng hai lần (ví dụ #define TEST(a,b) TN::Info get ## a(){return b;}
)?
rõ ràng là tôi đang suy nghĩ về cách phức tạp, cảm ơn – Grizzly
@ Grizzly: Trớ trêu thay, ngược lại! Bản năng đầu tiên của tôi cũng là để nối, vì macro về cơ bản là tìm và thay thế văn bản thay thế. Đó là khi bạn nhận ra rằng họ _are_ phức tạp hơn điều này (trong đó họ làm việc trên _tokens_ và bộ não của chúng tôi không) rằng vấn đề như thế này đi lên. :) –