Можно ли сделать лямбду с областью динамического закрытия, в зависимости от объекта?C++

Программы на C++. Форум разработчиков
Anonymous
 Можно ли сделать лямбду с областью динамического закрытия, в зависимости от объекта?

Сообщение Anonymous »

У меня есть идея создать что-нибудь линейное логгер Python, но на C++. Самое главное — это возможность создавать дочерние элементы с вложенными именами.
Я написал что-то вроде этого (упрощенный пример):

Код: Выделить всё

#include 

// Some third-party logger that I can't change
struct LogImpl {
std::function formatter{nullptr};

void write(const std::string &msg) const {
const auto fMsg = formatter ? formatter(msg) : msg;
std::cerr formatter = [&](const std::string &msg) {
return name + "\t" + msg + "\n";
};
}
};

int main() {
auto impl = new LogImpl();
Logger rootLogger{"root", impl};
auto childLogger = rootLogger.getChild("child");

rootLogger.setRichFormat();

rootLogger.write("ROOT MSG");
childLogger->write("CHILD MSG");

delete impl;
return 0;
}
Но очевидно, что в этом случае вывод будет:

Код: Выделить всё

root    ROOT MSG

root    CHILD MSG
И я думаю, как изменить этот код, чтобы добиться результата:

Код: Выделить всё

root    ROOT MSG

root.child  CHILD MSG
И я не могу ничего придумать, чтобы разобраться в этом.

Подробнее здесь: https://stackoverflow.com/questions/790 ... -on-object

Вернуться в «C++»