关于工程接口封装中的全局变量小记

在平时工作中会对工程进行封装,在多个子工程合并时,有时需要全局变量A在整个工程中使用,这时需要加入特定的关键字才能使变量达到我们想要的效果。

  1. static的一种使用:
    例子:
   enum StrType{
            strM1= 1, //model1
            strM2 = 2, //model2
            strM3= 5,
            strM_MAX,
        };
    pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
    int IClassCommon::LoadModel(StrType model_type,std::string& model)
    {
     /**
      *  static: 不希望暴露在外部,本次用完之后,下次调用时里面的数据仍然存在, 而且每次使用时都能看到变量定义,一目了然,便于理解函数。
      * 形式看起来是局部变量,而其实质是行使全局变量
      */
        static std::map<StrType,std::string> map_type2models; 
        int ret = 0; //
        pthread_mutex_lock(&mutex); // 加锁的目的是保护每次访问的内容不被破坏,且注意返回变量的方式
        if(model_type <= 0 || model_type >= strM_MAX)
        {
            ret = -1;
        }
        else if(model.empty())
        {
            std::map<StrType,std::string>::iterator it = map_type2models.find(model_type);
            if( it != map_type2models.end() )
            {
                model = it->second;
            }
            else
            {
                ret = -1;
            }
        }
        else
        {
            map_type2models[model_type] = model;
        }
        pthread_mutex_unlock(&mutex);
        return ret;//注意变量的使用,在顺序执行完后最后进行解锁返回,否则每次解锁return 变量,比较麻烦
    }
    //该函数的作用是用于接口中多种模型路径装载
  1. extern的使用:
    extern: 定义的变量暴露在外部,同时在其他文件中访问时,使用时与定义变量隔的比较远,不便于理解。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值