Tôi có nhiều biến được đặt tên giống như phần tử trong tài liệu kỹ thuật để phiên bản chuỗi của tên cũng hữu ích.Macro C/C++ mở rộng thành đối số, đối số dưới dạng chuỗi
tôi thấy mình sử dụng một macro như thế này rất nhiều:
#define MACRO(a) a, #a
sử dụng điển hình là:
void someFunction(int a, const char *name);
someFunction(MACRO(meaningfully_named_variable));
Câu hỏi của tôi có ba điểm:
- Có một cách tốt hơn làm điều này?
- Macro tương tự có sẵn trong Boost hoặc các thư viện khác không?
- Nếu không, làm thế nào tôi có thể tinh chỉnh và đổi tên nó để làm cho nó rõ ràng và hữu ích?
Sửa tôi nên đã nói rằng ở trên là một ví dụ rất nhỏ. Hàm này có thể có các tham số khác và thực thể được đặt tên có thể là một thành viên dữ liệu hoặc thậm chí có thể là một hàm.
Một tiện ích mở rộng khác mà tôi đang xem xét cho C++ là một lớp NamedRef
có thể nhận được nội dung của macro.
template <typename T>
struct NamedRef
{
NamedRef(T *t, const char *name) : t(t), name(name) { }
T *t;
const char *name;
};
template <typename T>
NamedRef<T> namedRef(T &t, const char *name)
{
return NamedRef<T>(&t, name);
}
#define WITH_NAME(a) a, #a
// more sophisticated usage example
void otherFunction(double, NamedRef<int>, bool);
otherFunction(0.0, namedRef(object.WITH_NAME(meaningful_member_name)), false);
Tất cả những gì tôi muốn làm là chọn một tên mô tả hơn cho macro, ví dụ: 'WITH_NAME()'. –
Làm những gì @MarkRansom đề xuất. Câu trả lời của tôi là một cách dài để nói "nó tốt" và Boost có một macro gọi là 'BOOST_STRINGIZE (X)'. – AusCBloke