外部 Lambda 函数

Extern Lambda Function

我如何将以下 lambda 函数从源文件外部扩展到 header,以便我可以在不同的源文件中使用它?

const auto perform_checks = [&]()
{
    const auto func =
        GetFunctionPEB(static_cast<LPWSTR>(L"ntdll.dll"), "NtSetDebugFilterState");

    auto* func_bytes = reinterpret_cast<BYTE*>(func);
    if (is_hooked(func_bytes))
    {
        ProtectionThread();
    }
};

嗯,也许这就是你想要的方向

#include <functional>
#include <iostream>

// In header file
extern std::function<void(void)> externedFunction;

// In c++ file
std::function<void(void)> externedFunction = [](){
    std::string msg = "performing checks";

    const auto perform_checks = [msg]()
    {
        std::cout << msg << std::endl;
    };
    return perform_checks;

}();

这是一个可疑的用例。但是请注意,我按值捕获了 msg。如果您通过引用捕获,则不能 return lambda,因为您将捕获对堆栈变量的引用,并最终导致未定义的行为,这可能意味着您的应用程序崩溃

或者你也可以这样做。

#include <functional>
#include <iostream>

// In header file
extern std::function<void(void)> externedFunction;



// In c++ file
static std::string msg = "performing checks";

std::function<void(void)> externedFunction = 
    [&msg]()
    {
        std::cout << msg << std::endl;
    };
   

但是你可能只使用一个函数会更好。但我想你有你的理由。