如何将 std::function 放入像 std::unique_ptr 这样的智能指针中并使用它?

问题描述 投票:0回答:2

如何将

std::function
放入像
std::unique_ptr
这样的智能指针中并使用它?我已经尝试过了,但没成功。

这是我已经尝试过的代码:

const inline void PrintSection(TurboINI::types::section &section)
{
    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);
}
c++ function lambda smart-pointers
2个回答
0
投票

我认为没有理由在这里使用

std::unique_ptr
(或任何智能指针)。

A

std::function
是一个相对轻量级的对象,通常通过值传递或存储。

您可以简单地将

PrintSectionContent
变成
std::function
:

std::function<void(TurboINI::types::section &)> PrintSectionContent =
        [&](TurboINI::types::section &_section) {
        // ...
        };

然后像您尝试的那样调用存储的 lambda:

PrintSectionContent(section);

0
投票

好吧,正如 @AlanBirtles 提到的,我必须像

PrintSectionContent(section)
这样调用
(*PrintSectionContent)(section)
。但如果我像
*PrintSectionContent(section)
那样调用它就行不通,我不知道为什么。

© www.soinside.com 2019 - 2024. All rights reserved.