我有许多变量的名称与工程规范文档中的元素相同,因此名称的字符串版本也很有用。
我发现自己经常使用这样的宏:
#define MACRO(a) a, #a
典型用法是:
void someFunction(int a, const char *name);
someFunction(MACRO(meaningfully_named_variable));
我的问题有三个:
- 有没有更好的方法来做到这一点?
- Boost 或其他库中是否有类似的宏?
- 如果没有,我该如何改进和重命名它以使其清晰有用?
编辑 我应该说上面是一个最小的例子。该函数可能有其他参数,命名实体可能是数据成员,甚至可能是函数本身。
我正在为 C++ 考虑的另一个扩展是一个NamedRef
可以接收宏内容的类。
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);