首页 > 编程语言 >C++静态类成员变量和成员函数

C++静态类成员变量和成员函数

时间:2023-01-05 18:44:13浏览次数:42  
标签:real uint64 静态 成员 mask C++ CalculateBufferSize image size

头文件 calculateBufferSize.h

#ifndef CALCULATE_BUFFER_SIZE
#define CALCULATE_BUFFER_SIZE
#include <mutex>
#include <memory>
#include <iostream>
#include <glm/glm.hpp>


class CalculateBufferSize {
    public:
        typedef std::shared_ptr<CalculateBufferSize> Ptr;
        CalculateBufferSize(){
            image_number   = 20;
            image_width    = 1920;
            image_height   = 1080;

            // 计算空间大小bytes,申请内存空间
            image_size     = image_width * image_height * 3ULL; // 单张彩色图大小
            mask_size      = image_width * image_height * 1ULL; // 单张mask图大小
            mask_dt_size       = image_width * image_height * sizeof(float); // 单张mask图大小
            all_images_size    = image_size * image_number;
            all_masks_size     = mask_size * image_number;
            all_masks_dt_size  = mask_dt_size * image_number;
            buffer_size        = all_images_size + all_masks_size + all_masks_dt_size * 2;

            real_KRt44_size        = sizeof(glm::mat4);
            all_real_KRt44_size    = real_KRt44_size * image_number;
            real_Rt44_size         = sizeof(glm::mat4);
            all_real_Rt44_size     = real_Rt44_size * image_number;
            mp_real_K44_size       = sizeof(glm::mat4);
            all_mp_real_K44_size   = mp_real_K44_size * image_number;
            buffer_real_P_size     = all_real_KRt44_size + all_real_Rt44_size + all_mp_real_K44_size;

        };
        ~CalculateBufferSize(){};

        CalculateBufferSize(CalculateBufferSize &) = delete;        // 禁用拷贝构造
        CalculateBufferSize& operator=(const CalculateBufferSize &) = delete;   // 禁用赋值

        static Ptr GetInstance() {
            if(m_CalculateBufferSize == nullptr) {
                std::lock_guard<std::mutex> lk(m_mutex);
                if(m_CalculateBufferSize == nullptr) {
                        m_CalculateBufferSize = std::shared_ptr<CalculateBufferSize>(new CalculateBufferSize());
                }
            }
            return m_CalculateBufferSize;
        }
        uint64_t image_number;
        uint64_t image_width;
        uint64_t image_height;

        // 计算空间大小bytes,申请内存空间
        uint64_t image_size ; // 单张彩色图大小
        uint64_t mask_size; // 单张mask图大小
        uint64_t mask_dt_size; // 单张mask图大小
        uint64_t all_images_size;
        uint64_t all_masks_size ;
        uint64_t all_masks_dt_size ;
        uint64_t buffer_size   ;

        uint64_t real_KRt44_size  ;
        uint64_t all_real_KRt44_size   ;
        uint64_t real_Rt44_size      ;
        uint64_t all_real_Rt44_size   ;
        uint64_t mp_real_K44_size;
        uint64_t all_mp_real_K44_size;
        uint64_t buffer_real_P_size   ;
private:
    static Ptr m_CalculateBufferSize;
    static std::mutex m_mutex;

};
CalculateBufferSize::Ptr  CalculateBufferSize::m_CalculateBufferSize = nullptr;
std::mutex CalculateBufferSize::m_mutex;

#endif

测试 main.cpp

#include <iostream>
#include "calculateBufferSize.h"

using namespace std;

int main(){
    std::cout<<"begin"<<std::endl;
    CalculateBufferSize::Ptr test = CalculateBufferSize::GetInstance();
    std::cout<<"buffer_size:"<<test->buffer_size<<std::endl;
    std::cout<<"image_number:"<<test->image_number<<std::endl;

}

cmake

cmake_minimum_required (VERSION 2.8)
project (template)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/modules/")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
# find the required packages
find_package(GLM REQUIRED)
message(STATUS "GLM included at ${GLM_INCLUDE_DIR}")
include_directories(${CMAKE_SOURCE_DIR}/include)
set (CMAKE_CXX_LINK_EXECUTABLE "${CMAKE_CXX_LINK_EXECUTABLE} -ldl")
add_executable(testStatic testStatic.cpp)

标签:real,uint64,静态,成员,mask,C++,CalculateBufferSize,image,size
From: https://www.cnblogs.com/xiaohuidi/p/17028610.html

相关文章

  • C++实现有序表--顺序表的合并操作代码
    #include<iostream>#include<cstdlib>//C++动态分配存储空间usingnamespacestd;#defineOK1#defineERROR0#defineMAXSIZE100typedefintElemtype;typedefintStat......
  • Linux C++ 获取系统CPU和网络情况
    linux下C++获取系统CPU情况和网络使用情况#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<string.h>#defineMAXBUFSIZE1024#defineWAIT_SE......
  • 六款常用的linux C/C++ IDE
     一、AnjutaAnjuta是一个多语言的IDE,它最大的特色是灵活,同时打开多个文件,内嵌代码级的调试器(调用gdb),应用程序向导(Applicationwizards)可以方便的帮助你创建GNOME程序而不......
  • 基于OpenCV DNN模块给黑白老照片上色(附Python/C++源码)
    导读本文给大家分享一个用OpenCVDNN模块给黑白老照片上色的实例,并给出Python和C++版本源码。 背景介绍    这个项目是基于在加利福尼亚大学,伯克利,RichardZhang,Phil......
  • Linux - 配置远程开发Linux C/C++程序环境
    1.使用VS2019远程开发LinuxC/C++程序所谓工欲善其事必先利其器,开发一个项目之前,我们要选择好合适的开发工具以及开发环境。1.1LinuxC/C++程序常见的开发方式在Lin......
  • c++ 查找目录下的子目录及文件
    c++读取指定目录下的所有目录名称+文件名称-远征i-博客园(cnblogs.com) 文件句柄的类型long如果不行试试longlong 另外:使用了批处理,这篇很好CMD批处理循环......
  • 数位排序【第十三届蓝桥杯省赛C++C组】
    数位排序小蓝对一个数的数位之和很感兴趣,今天他要按照数位之和给数排序。当两个数各个数位之和不同时,将数位和较小的排在前面,当数位之和相等时,将数值小的排在前面。例如......
  • JSON(C++)
    JSON库​​https://github.com/open-source-parsers/jsoncpp​​​​解决jsoncpp中文乱码问题_weruoaszxcvnm的博客​​jsoncpp中文字符串被转为uuf8的解决办法-走看看......
  • QML/JS/C++
    ​​【QML快速入门】QML类型-fengMisaka​​在Qt C++中调用QML中的Javascript Function_青山绿水北京爷_新浪博客​​​​C++调用QML中的函数-xianyongchao​​C++......
  • 静态链接库与动态链接库
    ​​静态链接库​​​​动态链接库​​​​浅谈Windows平台下C++调用静态链接库的方式​​​​lib文件​​​​Windows动态链接库DLL使用​​​​WindowsAPI编程之动态链......