替换包含已弃用的一元函数的自定义模板
Replacing custom template who contain deprecated unary function
我想将我的Visual Studio程序升级到C++latsest。 正如我所看到的,unary_function被删除了。
这是我使用一元的实际代码
namespace std
{
template <class _Ty>
class void_mem_fun_t: public unary_function<_Ty*, void>
{
public:
explicit void_mem_fun_t(void (_Ty::*_Pm)()): _Ptr(_Pm)
{
}
void operator()(_Ty* _P) const
{
((_P->*_Ptr)());
}
private:
void (_Ty::*_Ptr)();
};
template<class _Ty> inline
void_mem_fun_t<_Ty> void_mem_fun(void (_Ty::*_Pm)())
{
return (void_mem_fun_t<_Ty>(_Pm));
}
}
这是一个自定义实现。 和用法:
for_each(
OneVector.begin(),
OneVector.end(),
std::void_mem_fun(&SomeClass::UseFunc)
);
我可以使用 lambda 作为替代品吗?或者你的建议是什么? 我需要一个关于 lambda 用法的示例。
"这是一个自定义实现。 - 严格来说,不允许将名称添加到命名空间std
中。这给你留下了正式的未定义的行为。因此,即使在升级之前,这也是一个坏主意。
由于您升级了,请使用std::mem_fn
,或者如果您坚持使用 lambda 解决方案:
for_each(
OneVector.begin(),
OneVector.end(),
[](auto *s) { return s->UseFunc(); } )
);
如果我正确理解代码,您需要做的就是使用std::mem_fn
而不是您的void_mem_fun
(因此也可以删除类模板)。
在auto a = std::mem_fn(&C::foo)
之后,a
是一个可调用的对象,它接受类型为C*
或C&
的参数并对其调用foo
。
相关文章:
- "error: no matching function for call to"构造函数错误
- 什么时候调用组成单元对象的析构函数
- 继承函数的重载解析
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- C++模板来检查友元函数的存在
- 递归函数计算序列中的平方和(并输出过程)
- 对RValue对象调用的LValue ref限定成员函数
- 如何在 std::transform 中使用 std::p ow 作为一元函数?
- 位集构造函数中的一元按位或折叠
- 替换包含已弃用的一元函数的自定义模板
- 为什么指向非静态成员函数的指针不能用作标准库算法的一元谓词
- 具有成员函数的一元谓词
- 在函数调用之前,一元运算符会否定运算符
- C++逻辑为真的一元函数
- 如何从函数模板类成员内的转换算法参数指向一元运算符函数
- 运算符重载:一元运算符重载函数返回在此代码中如何工作
- 将一元函数应用于向量的某些元素的良好实现是什么?
- 使用 +(一元加号)解决 lambda 的函数指针和 std::function 上的不明确重载
- 一元函数,接受迭代器元组并产生基本类型
- 用于普通操作的STD一元函数