求解答C++ Functor相关的问题!

ranqingfa 2015-11-10 03:23:23
下面是一个头文件的内容,貌似全是Functor相关的东西,希望大神给以解答或者指明应该看哪方面的资料,目前只了解貌似都是仿函数相关的知识,只是没有找到能很好解释的文章,望大神们推荐比较好的文章,谢谢!

#pragma once
#ifndef __FUNCTOR_H__
#define __FUNCTOR_H__

#define FUNCTOR_TYPEDEF(name, rettype, ...) \
typedef Functor<rettype, ## __VA_ARGS__> name

#define FUNCTOR_DECLARE(name, rettype, ...) \
Functor<rettype, ## __VA_ARGS__> name

#define FUNCTOR_BIND(obj, func, rettype, ...) \
Functor<rettype, ## __VA_ARGS__>::bind<remove_reference<decltype(*obj)>::type, func>(obj)

#define FUNCTOR_BIND_MEMBER(func, rettype, ...) \
Functor<rettype, ## __VA_ARGS__>::bind<remove_reference<decltype(*this)>::type, func>(this)

template <class RetType, class... Args>
class Functor
{
public:
constexpr Functor(void *obj, RetType (*method)(void *obj, Args...))
: _obj(obj)
, _method(method)
{
}

// Allow to construct an empty Functor
constexpr Functor(decltype(nullptr))
: Functor(nullptr, nullptr) { }

constexpr Functor()
: Functor(nullptr, nullptr) { }

// Call the method on the obj this Functor is bound to
RetType operator()(Args... args) const
{
return _method(_obj, args...);
}

// Compare if the two Functors are calling the same method in the same
// object
inline bool operator==(const Functor<RetType, Args...>& rhs)
{
return _obj == rhs._obj && _method == rhs._method;
}

// Allow to check if there's a method set in the Functor
explicit operator bool() const
{
return _method != nullptr;
}

template<class T, RetType (T::*method)(Args...)>
static constexpr Functor bind(T *obj)
{
return { obj, method_wrapper<T, method> };
}

private:
void *_obj;
RetType (*_method)(void *obj, Args...);

template<class T, RetType (T::*method)(Args...)>
static RetType method_wrapper(void *obj, Args... args)
{
T *t = static_cast<T*>(obj);
return (t->*method)(args...);
}
};

template< class T > struct remove_reference {typedef T type;};
template< class T > struct remove_reference<T&> {typedef T type;};
template< class T > struct remove_reference<T&&> {typedef T type;};

#endif
...全文
275 4 打赏 收藏 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 2 楼 ranqingfa 的回复:
[quote=引用 1 楼 akirya 的回复:] 用了不少C++11的东西,变长模板参数 、 constexpr 感觉这个Functor不如直接用 bind
好吧,对我这个C++新手来说,确实不容易啊,看来编写程序的人C++很牛啊,是国外的! 大神,能稍微解释解释吗?[/quote] 就是把 成员函数和某个对象绑定,转换成一个函数对象。这样调用的时候就不需要传递对象来调用成员函数了。
yshuise 2015-11-10
  • 打赏
  • 举报
回复
全部展开,慢慢理解消化。 想当初,我阅读了很多的BOOST源码,可惜现在有好几年了,都忘记了。 反正,就是要把宏展开来理解。
ranqingfa 2015-11-10
  • 打赏
  • 举报
回复
引用 1 楼 akirya 的回复:
用了不少C++11的东西,变长模板参数 、 constexpr 感觉这个Functor不如直接用 bind
好吧,对我这个C++新手来说,确实不容易啊,看来编写程序的人C++很牛啊,是国外的! 大神,能稍微解释解释吗?
  • 打赏
  • 举报
回复
用了不少C++11的东西,变长模板参数 、 constexpr 感觉这个Functor不如直接用 bind
内容概要:本文系统研究了基于雅可比伪逆迭代的双臂协同轨迹规划与跟踪误差收敛性问题,结合机械臂正向与逆向运动学建模、蒙特卡洛法分析工作空间、笛卡尔空间内的圆弧轨迹生成等关键技术,利用Matlab实现了双臂系统的协同控制与轨迹跟踪仿真。重点探讨了雅可比矩阵伪逆法在解决冗余自由度机械臂逆运动学问题中的应用,深入分析了轨迹跟踪过程中误差的收敛特性,并通过仿真实验验证了该方法在复杂任务场景下的有效性、稳定性与鲁棒性,为多臂机器人在工业自动化、精密操作等领域的协同作业提供了理论依据与技术支持。; 适合人群:具备机器人学、自动控制理论基础及Matlab编程能力的科研人员与工程技术人员,特别适合从事机械臂控制、轨迹规划、多机器人协同等方向的硕士、博士研究生及相关领域研究人员。; 使用场景及目标:①掌握基于雅可比伪逆法的机械臂逆运动学求解原理与实现方法;②理解双臂系统在笛卡尔空间中协同轨迹规划的机制;③分析并优化轨迹跟踪过程中的误差收敛性能;④为多机器人系统在复杂动态环境下的高精度协同控制提供算法设计与仿真验证支持。; 阅读建议:建议读者结合文中提供的Matlab代码进行实践操作,按照文档目录循序渐进地学习,重点关注算法实现细节、仿真参数设置与结果分析部分,同时可进一步探索将智能优化算法或深度学习方法引入轨迹规划与误差补偿的研究方向。

65,214

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧