首页 > 其他分享 >类内的静态成员函数

类内的静态成员函数

时间:2024-03-07 11:36:23浏览次数:15  
标签:last Eigen point 静态 类内 curr 函数

A-LOAM代码中,用ceres构建优化问题时,有如下代码

struct LidarEdgeFactor
{
	LidarEdgeFactor(Eigen::Vector3d curr_point_, Eigen::Vector3d last_point_a_,
					Eigen::Vector3d last_point_b_, double s_)
		: curr_point(curr_point_), last_point_a(last_point_a_), last_point_b(last_point_b_), s(s_) {}

	template <typename T>
	bool operator()(const T *q, const T *t, T *residual) const
	{

		Eigen::Matrix<T, 3, 1> cp{T(curr_point.x()), T(curr_point.y()), T(curr_point.z())};
		Eigen::Matrix<T, 3, 1> lpa{T(last_point_a.x()), T(last_point_a.y()), T(last_point_a.z())};
		Eigen::Matrix<T, 3, 1> lpb{T(last_point_b.x()), T(last_point_b.y()), T(last_point_b.z())};

		//Eigen::Quaternion<T> q_last_curr{q[3], T(s) * q[0], T(s) * q[1], T(s) * q[2]};
		Eigen::Quaternion<T> q_last_curr{q[3], q[0], q[1], q[2]};
		Eigen::Quaternion<T> q_identity{T(1), T(0), T(0), T(0)};
		q_last_curr = q_identity.slerp(T(s), q_last_curr);
		Eigen::Matrix<T, 3, 1> t_last_curr{T(s) * t[0], T(s) * t[1], T(s) * t[2]};

		Eigen::Matrix<T, 3, 1> lp;
		lp = q_last_curr * cp + t_last_curr;

		Eigen::Matrix<T, 3, 1> nu = (lp - lpa).cross(lp - lpb);
		Eigen::Matrix<T, 3, 1> de = lpa - lpb;

		residual[0] = nu.x() / de.norm();
		residual[1] = nu.y() / de.norm();
		residual[2] = nu.z() / de.norm();

		return true;
	}

	static ceres::CostFunction *Create(const Eigen::Vector3d curr_point_, const Eigen::Vector3d last_point_a_,
									   const Eigen::Vector3d last_point_b_, const double s_)
	{
		return (new ceres::AutoDiffCostFunction<
				LidarEdgeFactor, 3, 4, 3>(
			new LidarEdgeFactor(curr_point_, last_point_a_, last_point_b_, s_)));
	}

	Eigen::Vector3d curr_point, last_point_a, last_point_b;
	double s;
};

其中static ceres::CostFunction *Create(...)函数是类的静态成员函数。关于静态成员函数,chatgpt回答:

类内的静态成员函数(static member function)是属于类本身而不是类的实例的函数。它们被声明为静态成员函数,因此可以在没有创建类对象的情况下直接访问。

静态成员函数在类的定义中使用static关键字进行声明,并且不依赖于类的实例。它们可以通过类名加上作用域解析运算符::来调用,而不需要创建类的实例。

静态成员函数的作用可以有以下几个方面:

访问静态成员变量:静态成员函数可以直接访问类中的静态成员变量(静态数据成员),因为它们都属于类本身而不是类的实例。

提供公共接口:静态成员函数可以作为类的公共接口,提供对类的功能的访问,而无需创建类的实例。其他代码可以直接使用类名加上作用域解析运算符调用静态成员函数,以获取类的某些功能或执行某些操作。

实现工具函数:静态成员函数可以用于实现一些与类相关但不依赖于类的实例的工具函数。这些函数可以在类的定义中定义并通过类名直接调用。

协助创建对象:静态成员函数可以用于协助创建类的对象。例如,单例模式中的静态成员函数用于创建类的唯一实例。

总之,静态成员函数是属于类本身而不是类的实例的函数。它们可以在没有创建类对象的情况下直接访问,并提供对类的功能的访问接口、实现工具函数、访问静态成员变量等功能。

标签:last,Eigen,point,静态,类内,curr,函数
From: https://www.cnblogs.com/havain/p/18058507

相关文章

  • P001-根据编码规则自动生成ID的函数
    --创建sequenceCREATESEQUENCEseq_1765319714616074242INCREMENT1MINVALUE3MAXVALUE9999START3NOCYCLENOCACHE;--变更sequenceALTERSEQUENCEseq_1765319714616074242INCREMENT1MINVALUE10MAXVALUE9999START10NOCYCLENOCACHE;--删除sequence......
  • STL函数
    String容器1.初始化string();//创建一个空的字符串例如:stringstr;string(constchar*s);//使用字符串s初始化string(conststring&str);//使用一个string对象初始化另一个string对象string(int......
  • CentOS 7 配置静态IP (VMware 虚拟机)
    1.打开虚拟网络编辑器1.1编辑==>虚拟网络编辑器(Ps:需要先将系统关机)2.更改配置2.1使用管理员权限更改设置2.2接着将动态分配ip设置(DHCP)关掉,查看NAT设置,记住子网ip,子网掩码,网关3.开机进入centos系统,配置静态ip3.1编辑网络接口的配置文件#vi编辑vi/etc/......
  • clang在指定-O2时对函数局部变量的优化
    在我们将编译器从g++迁移到clang++的过程中,遇到一个问题,有个工具程序只要一运行就会出现coredump问题,并且用gdb调试core文件也无法获得任何有用的堆栈信息。通过不断尝试,发现只有在clang++使用-O2编译时得到的程序才会发生这个问题,使用clang++-O0或者g++编译时不会发生问题。......
  • Vue学习笔记36--VueComponent构造函数
    VueComponent构造函数<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>VueComponent&......
  • C++派生类构造函数
    实例#include<iostream>usingnamespacestd;classBase1{//基类Base1,构造函数有参数public:Base1(inti){cout<<"ConstructingBase1"<<i<<endl;}};classBase2{//基类Base2,构造函数有参数public:Base2(intj){cout<&l......
  • Mysql和Oracle在order by上关于聚合函数一些不同的差异
    1.问题SELECTp.PDTNO,p.PDTNAME,sum(a.QUANTITY)ASapplySumCountFROMPRODUCTpJOINAPPLYaONp.PDTNO=a.PDTNOGROUPBYPDTNOORDERBYapplySumCountDESC;在Mysql中我们经常将select中聚合函数得到的结果起别名用于orderby但是同样的方式在Oracle中就不行,......
  • 【Python基础】Python 函数返回多个值和函数注解
    [本文出自天外归云的博客园]Python函数返回多个值和函数注解在Python中,函数可以返回多个值。这在某些情况下很有用,因为它允许函数一次性返回多个相关联的结果。Python使用元组(tuple)来实现这一特性。函数返回多个值示例下面是一个示例函数,它接受一个整数和一个字符串作为......
  • C语言常用工具函数
    整数/*atf/include/lib/utils_def.h*//**Thisvariantofdiv_round_upcanbeusedinmacrodefinitionbutshouldnot*beusedinCcodeasthe`div`parameterisevaluatedtwice.*/#defineDIV_ROUND_UP_2EVAL(n,d) (((n)+(d)-1)/(d))#definedi......
  • Python函数每日一讲 - hex()
    引言在Python编程中,处理十六进制数据是一项常见的任务。hex()函数就是Python中用于将整数转换为十六进制字符串的函数。本文将深入介绍hex()函数的使用方法,并通过实例演示其在实际应用中的作用,帮助大家更好地掌握这一工具。语句概览hex()函数是Python内置函数之一,用于将整数转......