将自由函数转换为DefaultConstructible函数对象

阿比克斯

我正在寻找将自由函数转换为默认可构造函数对象的类型。

它应该是一个类模板,它将功能作为模板参数:

template<typename F, F P>
struct fn_to_type {
    template<class... Args>
    decltype(auto) operator()(Args&&... args) {
        return P(std::forward<Args>(args)...);
    }  
};

因此,它可用作容器和智能指针的模板参数:

bool CloseHandle(void* handle);
using UniqueHandle = std::unique_ptr<void, fn_to_type<decltype(&CloseHandle), &CloseHandle>>;

bool FooLess(const Foo& lhs, const Foo& rhs);
using FooSet = std::set<Foo, fn_to_type<decltype(&FooLess), &FooLess>>;

标准库肯定没有这种功能,但是Boost库可能有吗?

我也很好奇为什么这样的东西不在标准库中-我有看不见的陷阱吗?

而且,如果没有具有此类功能的库,是否有办法改进此功能fn_to_type例如,要做一些避免两次输入函数名称的事情?

阿比克斯

标准库已经有一个类,可以将函数指针转换为默认可构造的类类型:

template <class T, T v>
struct integral_constant {
    ...
    constexpr operator value_type() { return value; }
};

因此,可以使用它代替fn_to_type该类:

#include <type_traits>

bool CloseHandle(void* handle);
using UniqueHandle = std::unique_ptr<void, std::integral_constant<decltype(&CloseHandle), &CloseHandle>>;

bool FooLess(const Foo& lhs, const Foo& rhs);
using FooSet = std::set<Foo, std::integral_constant<decltype(&FooLess), &FooLess>>;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将自由变量转换为绑定变量

自由函数中的类型转换

将自定义公式转换为python函数

将自由形式的sql转换为活动记录

firebase函数将整数转换为对象

函数将单个对象转换为数组?

将函数对象转换为数组

R函数将对象转换为代码

将对象转换为函数的参数

将对象方法作为lambda或部分函数传递,将自身参数替换为目标对象?

转换为箭头函数

无法将自定义CGRect函数从Objective-C转换为Swift

在pyspark中将自定义函数的输出从默认的StringType转换为mapType

我应该将 C 静态函数转换为私有成员函数还是未命名命名空间中的自由函数?

通过导入的函数将变量转换为类对象

使用函数将抽象类从对象转换为指针

将jquery对象转换为DOM并使用appendChild函数

如何在python函数中将ldap对象转换为整数?

创建对象/函数的实例将 JavaScript 转换为 TypeScript

在 Ruby on Rails 中将函数参数转换为 Hash 对象

为什么使用 unset() 函数将数组转换为对象?

如何转换重载的自由函数来解决重载冲突?

如何将自由形式的谓词作为模板函数指针参数传递?

将返回对象指针的函数强制转换为返回空指针的函数合法吗?

R:在函数内部将类型为closure(=函数)的对象转换为字符串

Javascript将函数转换为箭头函数

将递归函数转换为迭代函数

将bash函数转换为fish的函数

从函数隐式转换为函数指针?