首页 > 其他分享 >单例模式

单例模式

时间:2024-03-07 10:34:20浏览次数:16  
标签:CameraConstPtr const Eigen 模式 observed 实例 单例 odo

class CostFunctionFactory
{
public:
    EIGEN_MAKE_ALIGNED_OPERATOR_NEW
    CostFunctionFactory();

    static boost::shared_ptr<CostFunctionFactory> instance(void);

    ceres::CostFunction* generateCostFunction(const CameraConstPtr& camera,
                                              const Eigen::Vector3d& observed_P,
                                              const Eigen::Vector2d& observed_p,
                                              int flags) const;

    ceres::CostFunction* generateCostFunction(const CameraConstPtr& camera,
                                              const Eigen::Vector3d& observed_P,
                                              const Eigen::Vector2d& observed_p,
                                              const Eigen::Matrix2d& sqrtPrecisionMat,
                                              int flags) const;

    ceres::CostFunction* generateCostFunction(const CameraConstPtr& camera,
                                              const Eigen::Vector2d& observed_p,
                                              int flags, bool optimize_cam_odo_z = true) const;

    ceres::CostFunction* generateCostFunction(const CameraConstPtr& camera,
                                              const Eigen::Vector2d& observed_p,
                                              const Eigen::Matrix2d& sqrtPrecisionMat,
                                              int flags, bool optimize_cam_odo_z = true) const;

    ceres::CostFunction* generateCostFunction(const CameraConstPtr& camera,
                                              const Eigen::Vector3d& odo_pos,
                                              const Eigen::Vector3d& odo_att,
                                              const Eigen::Vector2d& observed_p,
                                              int flags, bool optimize_cam_odo_z = true) const;

    ceres::CostFunction* generateCostFunction(const CameraConstPtr& camera,
                                              const Eigen::Quaterniond& cam_odo_q,
                                              const Eigen::Vector3d& cam_odo_t,
                                              const Eigen::Vector3d& odo_pos,
                                              const Eigen::Vector3d& odo_att,
                                              const Eigen::Vector2d& observed_p,
                                              int flags) const;

    ceres::CostFunction* generateCostFunction(const CameraConstPtr& cameraLeft,
                                              const CameraConstPtr& cameraRight,
                                              const Eigen::Vector3d& observed_P,
                                              const Eigen::Vector2d& observed_p_left,
                                              const Eigen::Vector2d& observed_p_right) const;

private:
    static boost::shared_ptr<CostFunctionFactory> m_instance;
};


这段代码中,涉及到单例模式

chatgpt的回答如下

单例模式是一种设计模式,用于确保一个类只有一个实例,并提供全局访问该实例的方式。要实现一个单例模式,需要满足以下条件:

私有的构造函数:确保其他类不能直接实例化该类的对象。将构造函数声明为私有的,防止外部代码通过new操作符创建类的实例。

静态成员变量:在类的内部定义一个静态成员变量,用于保存类的唯一实例。

静态成员函数:提供一个公共的静态成员函数,用于获取类的唯一实例。这个函数通常被命名为instance()或getInstance()。

延迟实例化:在静态成员函数中,检查类的唯一实例是否已经存在。如果存在,直接返回该实例;如果不存在,创建一个新的实例并返回。

线程安全性:如果在多线程环境下使用单例模式,需要考虑线程安全性。可以使用互斥锁(mutex)或双重检查锁定(double-checked locking)等机制来确保线程安全性。

在给定的代码中,CostFunctionFactory类实现了单例模式。它满足上述条件:私有的构造函数、静态成员变量m_instance用于保存实例、静态成员函数instance()用于获取实例,以及延迟实例化的逻辑。这样,通过CostFunctionFactory::instance()方法可以获取全局唯一的CostFunctionFactory实例。

标签:CameraConstPtr,const,Eigen,模式,observed,实例,单例,odo
From: https://www.cnblogs.com/havain/p/18058333

相关文章

  • 【c++八股】手撕单例模式
    懒汉模式classSingleton{public:staticSingleton&Instance(){if(instance_==nullptr)instance_=newSingleton();}returninstance_;}private:Singleton(){}~Singleton(){} //防拷贝 Singleton(c......
  • 工作中常用的6种设计模式
    谈起设计模式,你一定会问?这玩意到底有啥用?我好像没用过也不影响做一个码农。也可能项目中实际用了,但是你不自知。虽然Java设计模式有23种,但是工作中常用的可能并没有那麽多。就像新华字典有多少字,你没必要都学一样。本章我们只谈常用的几种设计模式,通过设计模式的理念、规约、到应......
  • C# 控制台禁用快速编辑模式、在指定行更新文本、注册Ctrl+C事件处理器
    在第三行更新文本 代码如下usingMicrosoft.Win32.SafeHandles;usingSystem;usingSystem.Runtime.InteropServices;usingSystem.Threading;classProgram{[DllImport("kernel32.dll")]staticexternSafeFileHandleGetStdHandle(intnStdHandle);......
  • (续)signal-slot:python版本的多进程通信的信号与槽机制(编程模式)的库(library) —— 强化学
    前文:signal-slot:python版本的多进程通信的信号与槽机制(编程模式)的库(library)——强化学习ppo算法库sample-factory的多进程包装器,实现类似Qt的多进程编程模式(信号与槽机制)——python3.12版本下成功通过测试......
  • 数据挖掘概念与技术 - chapter 6 - 挖掘频繁模式、关联与相关性:基本概念与方法
    ***关联推荐!频繁模式:频繁地出现在数据集中的模式,给出数据集中反复出现的联系。频繁序列模式:如有序购买一系列产品频繁结构模式:如组合购买产品sample购物篮分析:通过发现顾客放入他们购物篮中的商品之间的关联,分析顾客的购物习惯,这种关联度发现可以帮助零售商在哪些商品频繁......
  • 真香定律!我用这种模式重构了第三方登录
    分享是最有效的学习方式。博客:https://blog.ktdaddy.com/老猫的设计模式专栏已经偷偷发车了。不甘愿做crudboy?看了好几遍的设计模式还记不住?那就不要刻意记了,跟上老猫的步伐,在一个个有趣的职场故事中领悟设计模式的精髓吧。还等什么?赶紧上车吧。故事办公室里,小猫托着腮帮对......
  • c#之asp.net的管道处理模式pipeline
    管道在进入管道之前首先要知道asp.netisApi所有的请求是由IIS转发给asp.netisApiHttpWorkerRequest监听asp.netisApi中的队列,HttpWorkerRequest是管道的执行入口 注册中间件的过程在响应请求的时候会触发事件,需要Config中配置以下是HtttpAplacation中的部分事件,在请求进......
  • 在Docker中,网络模式有哪些?
    在Docker中,网络模式是用来定义容器如何与宿主机和其他容器进行网络通信的。以下是Docker中常见的网络模式及其详细解释:Bridge模式(桥接模式):这是Docker的默认网络模式。当创建一个容器时,Docker会为其分配一个独立的网络命名空间,并在宿主机上创建一个虚拟网桥(默认为docker0),容器......
  • RocketMQ—消费者的两种消费模式
    RocketMQ—消费者的两种消费模式RocketMQ消息消费的模式分为两种:负载均衡模式和广播模式,负载均衡模式表示多个消费者交替消费同一个主题里面的消息;广播模式表示每个每个消费者都消费一遍订阅的主题的消息。负载均衡模式CLUSTERING集群模式下队列会被消费者分摊,队列数量>=消......
  • 精简实现、线程安全:C#通用单例泛型基类助你轻松创建单例模式
     概述:该通用单例泛型基类使用C#实现,线程安全,通过泛型参数和Lazy<T>实现简化的单例模式。优点包括线程安全、泛型通用性、简化实现、以及延迟加载的特性。优点:线程安全: 使用Lazy<T>确保了线程安全的延迟初始化,避免了在多线程环境下可能导致的竞态条件问题。泛型通用性: 通......