如何将
std::function
放入像std::unique_ptr
这样的智能指针中并使用它?我已经尝试过了,但没成功。
这是我已经尝试过的代码:
const inline void PrintSection(TurboINI::types::section §ion)
{
std::cout << "[\"" << section.GetKey() << "\"]\n";
auto PrintSectionContent =
std::make_unique<std::function<void(TurboINI::types::section &)>>([&](TurboINI::types::section &_section) {
if (!section.GetIntegers().empty())
{
for (const auto &i : _section.GetIntegers())
{
std::cout << '\t';
PrintInteger(i);
}
}
if (!section.GetStrings().empty())
{
for (const auto &i : _section.GetStrings())
{
std::cout << '\t';
PrintString(i);
}
}
});
PrintSectionContent(section);
}
我认为没有理由在这里使用
std::unique_ptr
(或任何智能指针)。
A
std::function
是一个相对轻量级的对象,通常通过值传递或存储。
您可以简单地将
PrintSectionContent
变成 std::function
:
std::function<void(TurboINI::types::section &)> PrintSectionContent =
[&](TurboINI::types::section &_section) {
// ...
};
然后像您尝试的那样调用存储的 lambda:
PrintSectionContent(section);
好吧,正如 @AlanBirtles 提到的,我必须像
PrintSectionContent(section)
这样调用 (*PrintSectionContent)(section)
。但如果我像*PrintSectionContent(section)
那样调用它就行不通,我不知道为什么。