【发布时间】:2020-09-23 13:48:41
【问题描述】:
假设我有两个函数接收不同的 lambda 类型作为参数:
template<typename F>
void func1(F&& lambda) {
// lambda must be [](unsigned int) -> short
}
template<typename F>
void func2(F&& lambda) {
// lambda must be [](const vector<string>&) -> void
}
如何在 C++17 中限制这些 lambda 签名,以完全匹配我在每种情况下的需要?
【问题讨论】:
-
这有帮助吗? stackoverflow.com/a/50859251
-
您想特别限制 lambdas 的签名还是允许任何可以使用特定参数集调用的给定可调用对象类型?
-
@pasbi 可能是,但它似乎没有验证返回类型。我很难处理给定的示例,它没有编译。
-
@NicolBolas 我想限制 lambda 的签名,包括返回类型。
-
@rodrigocfd:嗯,你不能专门限制 lambda 的签名,因为没有任何机制可以用来区分 lambda 和任何其他可调用的用户定义类型.
标签: c++ templates lambda constraints c++17