如何将“std::function”类型的参数转换为稍微不同的 std::function?

时间:2021-08-01 15:01:04

标签: c++ c++17

我有一个函数,其中一个参数是 global czacik:=true Hotkey, %DzialanieGuzik%, Dzialanie Hotkey, %ZabezpieczenieczatuGuzik%, Zabezpieczenieczatu Dzialanie: if(czacik=true){ Suspend ToolTip % A_IsSuspended ? "Skrypt wyłączony z użycia" : "", 400, 0 } Return ;``````````````````````````````````````````````````````````````````````````````````````````` Zabezpieczenieczatu: ~t:: Suspend On czacik=false Loop if (GetKeyState("Enter", "P") || GetKeyState("Escape", "P")) break Suspend Off czacik=true return 类型,其中“ConvertableToInt”是一种可以转换为 int 并且可以从 int 构造的类型。从这个函数中,我需要调用另一个(库)函数,其中一个参数是 std::function<std::string(ConvertableToInt)> 类型。

这里是任务出现的地方。库层的函数允许回调以从应用程序获取字符串。回调将索引作为参数。但是,应用层并不知道这些索引;它使用可以映射到索引并从索引构造的包装对象进行操作。我想编写一个中间函数来帮助调用应用程序回调。

有没有办法做到这一点?

1 个答案:

答案 0 :(得分:1)

只是为了充实 Igor 在评论中所说的内容,如果您的意思是该类可以从 int 构造,那么您可以使用 lambda 作为适配器,如下所示:

#include <iostream>
#include <functional>
#include <string>

class constructible_from_int {
    int v_;
public:
    constructible_from_int(int v) : v_(v) {}
    int value() const { return v_; }
};

void call_a_func(int n, const std::function<std::string(int)>& func_that_takes_an_int) {
    std::cout << "value => " << func_that_takes_an_int(n) << "\n";
}

std::string func_that_takes_a_constructible_from_int(constructible_from_int cfi) {
    return std::to_string(cfi.value());
}

int main() {
    call_a_func(42,
        [](int v) { return func_that_takes_a_constructible_from_int(v); }
    );
}