C++ 单例加入初始化参数

上一篇文章见:

C++单例模式及线程安全(含2004年和2011年版本)-3YL的博客

留言有个扛精,号称写了几十万行代码,说单例就要把初始化参数写死到类里面。那么我们来举一个例子。

比如我们有一个INI读写类,因为读写同一个文件,那做成单例肯定有好处,不会多个实例访问。代码如下:

class Config : public QObject{
public:
    // 单实例
    static Config& i();
 
    void save(const QString &key,const QVariant &value);
};
// 基本没问题,单例就用上面的方法创建:
Config &Config::i(){
    static Config cfg();
 
    return cfg;
}
Config::Config() : QObject(nullptr){
    m_configFile0 = new QSettings("c:\\abc.ini",QSettings::IniFormat);
 
    // 解决中文乱码问题
    m_configFile0->setIniCodec(QTextCodec::codecForName("UTF-8"));
}

看到没,这个扛精他把文件写到构造函数类里面,文件为c:\\abc.ini。

也就是说,他这个Config类,移植到别的工程的时候,都要改一下这个文件名,才能起一个新名字。当然他也可以起一个唯一的跟程序绑定名字,目录也可以放到temp,这又是牛角尖,我们不说。

假如他是负责这个模块,然后这个模块,比如dll,要给别的exe工程用,那是不是每个exe都要一个不同的dll?他还没发现他在做重复工作是不是?svn一大堆重复的Config工程?

那我们变通下:

class Config : public QObject{
public:
    // 单实例,增加参数
    static Config& i(QString file="");
 
    void save(const QString &key,const QVariant &value);
};

Config &Config::i(QString file){
    static Config cfg(file);
 
    return cfg;
}
// 构造时增加参数
Config::Config(QString file) : QObject(nullptr){
    m_configFile0 = new QSettings(file,QSettings::IniFormat);
 
    // 解决中文乱码问题
    m_configFile0->setIniCodec(QTextCodec::codecForName("UTF-8"));
}

如上所述,这个dll首次构造时是可以带一个参数进去的,就是可以把配置文件路径传进去,后续访问是不需要的。

这样,这个dll只需要维护一份,就可以配形形色色的exe了。

说了这么多,显然是证明这个扛精,代码写的不少,却没有得到精华,行将就木在copy patse,不会灵活变通。

面试过30多岁的人,写的代码,我都不忍直视,真是一点水平都没有。

一堆公众号,还说要30岁程序员要转型,bla bla bla,我转你妹,写的这么差,好意思跟人家国外50岁的程序员PK吗?能做出好的产品吗?

心浮气躁,不懂变通,一定是做不出好产品的!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值