2

我正在尝试将下面的 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 和 lambdas 重载的 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)
{
 ...

}

你能帮我填空吗?

4

1 回答 1

0

您可以尝试使用标准重载,如下所示:

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

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

如果这是不可接受的,您将不得不对模板元编程进行大量研究,以使 enable_if 以您想要的方式工作,这是可以想象的最虐待狂的编程形式。不过说真的,您可以尝试从 Andrei Alexandrescu 的 Modern C++ Design 开始。

于 2013-05-07T17:25:46.757 回答