c++ - 删除函数签名类型的成员性?(lambda 的 operator())
问题描述
我希望能够std::function
仅使用封装 lambda 的名称而不是使用硬编码的签名来实例化 a:
#include <functional>
auto l = [](bool b){ return b ? 1 : 0; };
std::function<int(bool)> f(l); // XXX - don't want the type hardcoded
// Is something like this possible?
// using sig_t = strip_memberness<decltype(l::operator())>;
// std::function<sig_t> f(l);
std::function<>
对于参数,有什么方法可以产生int(bool)
来自的类型l
?
即使 C++17 样式的模板参数推导将来可能使这种特定用例成为可能,但不幸的是,我仅限于 GCC 6/C++14,并且还希望访问该类型以用于模板实例化以外的目的。
解决方案
这些方面的东西:
#include <functional>
template <typename T>
struct MemberToFunction;
template <typename R, typename T, typename ... Args>
struct MemberToFunction<R (T::*)(Args...)> {
using type = R(Args...);
};
template <typename R, typename T, typename ... Args>
struct MemberToFunction<R (T::*)(Args...) const> {
using type = R(Args...);
};
int main()
{
auto l = [](bool b){ return b ? 1 : 0; };
std::function<MemberToFunction<decltype(&decltype(l)::operator())>::type> f(l);
}
推荐阅读
- amazon-web-services - Cloudformation 错误:属性验证失败:[在 {/} 中遇到不支持的属性:[UserData]]
- python - 在 postgres 中使用 python 并弹出此错误
- node.js - Typescript - 嵌套箭头函数类型
- bash - 如何使用 for 命令按文件给我输出?
- haskell - 左虚空怎么办?
- javascript - JQuery 用类替换 async:false 和 promise
- java - Unity 2019.3.1 SDK/JDK/NDK/GRADLE 应该下载哪个版本?
- reactjs - 为什么即使文档确实存在于 Firebase 中,“exists”方法也不评估为 true?
- django - 当我在 for 循环 {{product.i.product_name}} 内部使用时没有给出价值,但在 {{product.0.product_name}} 时工作正常
- python - 如何在 jupyter lab 中正确打印 url?