Я думаю, что Вы - безопасное создание сменной системы на основе:
, Вероятно, самая успешная система плагина C++: старый добрый Adobe Photoshop . И если не, что, один из виртуальных форматов синтезатора, таких как VSTi и т.д.
Не с самим языком, но вы можете написать что-то вроде:
#include <iostream>
#include <string>
class Foo
{
public:
Foo(const std::string& name) { m_name = name;}
void Print() { std::cout << "Instance name = " << m_name << std::endl; }
private:
std::string m_name;
};
int main()
{
Foo a("a");
Foo b("b");
a.Print();
b.Print();
return 0;
}
Это невозможно. В C ++ нет концепции «отражения», как в платформе .NET. Но в библиотеке MFC есть класс CRunTime - вы можете посмотреть, например.
Имена переменных не выдерживают компиляции. Лучшее, что вы можете сделать, - это передать имя переменной в конструктор объекта и сохранить его внутри объекта с помощью макроса. Последнее приведет к действительно уродливому коду, поэтому вам понадобится это только в крайнем случае.
Что бы это значило?
void f(T const& p) {
cout << p.name();
}
T r() {
T c;
return c;
}
void g() {
T a;
cout << a.name();
T & b = a;
cout << b.name();
T * ptr = &b;
cout << ptr->name();
T d = r();
cout << d.name();
}
Чего вы ожидали? "а" каждый раз? А как насчет к / д?
Имена переменных не существуют в скомпилированном коде.
Однако вы можете использовать некоторые #define
, чтобы получить имя в предварительной обработке, и пусть имена будут заполнены перед скомпилировать.
Примерно так:
#define SHOW(a) std::cout << #a << ": " << (a) << std::endl
// ...
int i = 2;
SHOW (i);
No. Variable names are for the programmer, the compiler sees addresses.
Other languages that provide meta-data/reflection about their program might provide this functionality, C++ isn't one of those languages.