Czy w języku c ++ można pobrać jako łańcuch nazwę zmiennej, która została przekazana jako parametr?
Nov 29 2020
Chciałbym móc coś takiego zrobić
int myVar = 3;
void logger(int param) {
std::cout << nameOf(param) << ": " << param << std::endl;
}
logger(myVar); // prints "myVar: 3"
Odpowiedzi
4 cigien Nov 29 2020 at 19:14
Nie, nie możesz jeszcze tego zrobić w języku C ++, ponieważ nie ma możliwości odbicia, aby to zrobić.
Możesz jednak użyć makr preprocesora, aby osiągnąć żądany efekt. Należy pamiętać, że makra są niebezpieczne i należy ich unikać w miarę możliwości.
Najpierw napisz funkcję implementacyjną, która przyjmuje wartość parametru i nazwę parametru, na przykład:
void logger_impl(int param, std::string param_name) {
std::cout << param_name << ": " << param << std::endl;
}
Następnie możesz napisać makro, które generuje ciąg z nazwy zmiennej w witrynie wywołania, używając #
(operator stringification), a następnie używa tego ciągu w wywołaniu funkcji implementacji:
#define logger(p) logger_impl(p, #p)
Oto demo .