У меня много переменных, которые называются так же, как элементы в документе инженерной спецификации, поэтому строковая версия имени также полезна.
Я часто использую макрос вроде этого:
#define MACRO(a) a, #a
Типичное использование:
void someFunction(int a, const char *name);
someFunction(MACRO(meaningfully_named_variable));
Мой вопрос состоит из трех частей:
Edit Я должен был сказать, что приведенный выше пример является минимальным. У функции могут быть другие параметры, а именованная сущность может быть членом данных или, возможно, даже самой функцией.
Еще одно расширение, которое я рассматриваю для 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);