gpt4 book ai didi

c++ - 使用可调用参数重载可调用

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:58:07 25 4
gpt4 key购买 nike

我正在尝试将如下所示的 C# 代码转换为 C++:

void SomeCall(Action action)
{
// do things like action();

}

void SomeCall(Action<Action> action)
{
// define some action1
// do things like action(action1);

}

SomeCall 的 C++ 等价物应该能够采用 std::function 以及具有相同签名的内联和大纲 C++ lambda。

在浏览了许多有关 C++ std::function 和 lambda 重载的 SO 问题之后,似乎答案应该是这样的:

template<typename Func>
enable_if<Func is something callable>
void SomeCall(Func&& action)
{
...
}

template<typename Func>
enable_if<Func is something callable taking another callable as the parameter>
void SomeCall(Func&& action)
{
...

}

你能帮我填空吗?

最佳答案

您可以像这样尝试使用标准重载:

void Fn( std::function<int(int)>& fn )
{
}

void Fn( std::function<int(float)>& fn )
{
}

如果这是 Not Acceptable ,您将不得不对模板元编程进行大量研究,以使 enable_if 以您想要的方式工作,这是可以想象到的最残酷的编程形式。不过,严肃地说,您可以尝试从 Andrei Alexandrescu 的现代 C++ 设计开始。

关于c++ - 使用可调用参数重载可调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14824681/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com