【发布时间】:2013-01-27 07:04:41
【问题描述】:
我正在尝试将如下 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)
{
...
}
你能帮我填空吗?
【问题讨论】:
-
R.Martinho Fernandes 写了一个比我好得多的解决方案,但他 cba 写了一个答案。这是他的:liveworkspace.org/code/1b7ka6$1
-
@Seth Visual Studio 2012 Update 1 编译器不喜欢它并弹出错误 C2995: ''unknown-type' f(T &&)' : function template has been defined 消息为第二个模板功能。
-
“TMP”是什么意思?
-
@phresnel 模板元编程
标签: c++ templates lambda functional-programming template-meta-programming