是否可以在类初始化之前填充const QHash(或类似的东西)?

埃里克

我正在尝试执行类似错误管理器类的操作,将枚举值链接到字符串和其他不重要的东西。

当我编写代码时,我停下了让我感到好奇的事情。我做的方式是,我的类有一个QHash对象,该对象将在构造函数中填充:

class PrtsERrs {
private: 
    QHash<int, QString> err;
public:
    PrtsErrs() {
        err.insert(MyEnum::ZERO_VALUE, "zero");
        err.insert(MyEnum::ONE_VALUE, "one");
        ...
    }
}

但是我认为这是“错误的”,然后我尝试找到更好的方法或“正确的方法”,但我失败了。

我想做的是这样的:

namespace Errs {
    enum Errs {
        ERR_TEST1 = 0,
        ERR_TEST2,
        ERR_TEST3
    };
}

class PrtsErrs {
private:
    const QHash<Errs::Errs, QString> errStr;
public:

    PrtsErrs() : errStr ({Errs::ERR_TEST1, "Test"},
                         {Errs::ERR_TEST2, "Test2"},
                         {Errs::ERR_TEST3, "Test3"}
                        ) {}

    QString errStr(Errs::Errs errCode) const { return errStr[errCode];}

};

可以使用c ++ 11和Qt做类似的事情吗?如果是这样,这是最好的方法吗?

蜡ze

在C ++ 11及更高版本中,您可以执行以下操作(使用C ++标准库中的类代替QHashand QString;可以对它进行一些较小的修改,使其与QHash/QString一起使用):

#include <iostream>
#include <map>

namespace Errs {
    enum Errs {
        ERR_TEST1 = 0,
        ERR_TEST2,
        ERR_TEST3
    };
}


class PrtsErrs {
private:
    const std::map<Errs::Errs, std::string> errStr {
        { Errs::Errs::ERR_TEST1, "ERR_TEST1" },
        { Errs::Errs::ERR_TEST2, "ERR_TEST2" },
        { Errs::Errs::ERR_TEST3, "ERR_TEST3" }
    };
public:
    std::string GetErrStr(Errs::Errs errCode) const 
    { 
        return errStr.at(errCode);
    }
} ;

int main() 
{
    PrtsErrs foo ; 
    std::cout << foo.GetErrStr(Errs::Errs::ERR_TEST2) << std::endl ;
    return 0;
}

您可以在此处尝试上面的代码但是,我建议不要制作一个将成员枚举转换为字符串的类,而建议制作一个非成员函数如:

std::string errs_to_string(Errs::Errs errCode)
{
    static const std::map<Errs::Errs, std::string> errStr {
        { Errs::Errs::ERR_TEST1, "ERR_TEST1" },
        { Errs::Errs::ERR_TEST2, "ERR_TEST2" },
        { Errs::Errs::ERR_TEST3, "ERR_TEST3" }
    };
    return errStr.at(errCode) ;
}

在这里尝试上述功能

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

是否有并发排序的字典或类似的东西?

来自分类Dev

NSString和类似的东西是否从MVC中排除?

来自分类Dev

Smalltalk中是否有+ =?还是类似的东西?

来自分类Dev

jQuery keyup,是否有keyleave或类似的东西?

来自分类Dev

NSString和类似的东西是否被排除在MVC之外?

来自分类Dev

NSUserDefaults / SharedPreferences是否在TypeScript中有任何类似的东西

来自分类Dev

从.class或类似的东西实例化Fragment对象?

来自分类Dev

从.class或类似的东西实例化Fragment对象?

来自分类Dev

以类似的方式初始化不同的类

来自分类Dev

没有可用的互联网连接时,我可以有类似的东西吗?

来自分类Dev

有什么办法可以使GNU xgettext(或类似的东西)与scala文件一起使用?

来自分类Dev

没有可用的互联网连接时,我可以有类似的东西吗?

来自分类Dev

LinkedHashMap(或类似的东西)可以使用自定义排序吗?

来自分类Dev

MSBuild是否具有OnImport回调或类似的东西来检测导入?

来自分类Dev

F#是否具有行多态性(或类似的东西?)

来自分类Dev

在引导程序中有<hr>,是否有类似的东西,但对于垂直分隔符?

来自分类Dev

Spring MVC中是否有与Struts2的ValueStack类似的东西?

来自分类Dev

DNN是否具有与Drupal中的View或Wordpress中的ACF类似的东西?

来自分类Dev

MSBuild是否具有OnImport回调或类似的东西来检测导入?

来自分类Dev

C#中是否有与C中的fflush()类似的东西?

来自分类Dev

Spring MVC中是否有与Struts2的ValueStack类似的东西?

来自分类Dev

F#是否具有行多态性(或类似的东西?)

来自分类Dev

批量读取Mongo DB的最佳方法-是否有类似的东西?

来自分类Dev

jQuery - 如何知道选择器是否应该有 # 或 . 或类似的东西?

来自分类Dev

在类中初始化QHash

来自分类Dev

是否可以在不使用框架的情况下在Node.js中创建JWT身份验证或类似的东西?

来自分类Dev

C#-从第三方库导入类并使其成为派生类(或类似的东西)

来自分类Dev

我可以使用CloudKit Web服务或类似的东西访问标准的iOS Notes和Reminders的数据吗?

来自分类Dev

q/kdb:如何将我的代码分成几行。是否有新的“转义”字符或类似的东西?

Related 相关文章

  1. 1

    是否有并发排序的字典或类似的东西?

  2. 2

    NSString和类似的东西是否从MVC中排除?

  3. 3

    Smalltalk中是否有+ =?还是类似的东西?

  4. 4

    jQuery keyup,是否有keyleave或类似的东西?

  5. 5

    NSString和类似的东西是否被排除在MVC之外?

  6. 6

    NSUserDefaults / SharedPreferences是否在TypeScript中有任何类似的东西

  7. 7

    从.class或类似的东西实例化Fragment对象?

  8. 8

    从.class或类似的东西实例化Fragment对象?

  9. 9

    以类似的方式初始化不同的类

  10. 10

    没有可用的互联网连接时,我可以有类似的东西吗?

  11. 11

    有什么办法可以使GNU xgettext(或类似的东西)与scala文件一起使用?

  12. 12

    没有可用的互联网连接时,我可以有类似的东西吗?

  13. 13

    LinkedHashMap(或类似的东西)可以使用自定义排序吗?

  14. 14

    MSBuild是否具有OnImport回调或类似的东西来检测导入?

  15. 15

    F#是否具有行多态性(或类似的东西?)

  16. 16

    在引导程序中有<hr>,是否有类似的东西,但对于垂直分隔符?

  17. 17

    Spring MVC中是否有与Struts2的ValueStack类似的东西?

  18. 18

    DNN是否具有与Drupal中的View或Wordpress中的ACF类似的东西?

  19. 19

    MSBuild是否具有OnImport回调或类似的东西来检测导入?

  20. 20

    C#中是否有与C中的fflush()类似的东西?

  21. 21

    Spring MVC中是否有与Struts2的ValueStack类似的东西?

  22. 22

    F#是否具有行多态性(或类似的东西?)

  23. 23

    批量读取Mongo DB的最佳方法-是否有类似的东西?

  24. 24

    jQuery - 如何知道选择器是否应该有 # 或 . 或类似的东西?

  25. 25

    在类中初始化QHash

  26. 26

    是否可以在不使用框架的情况下在Node.js中创建JWT身份验证或类似的东西?

  27. 27

    C#-从第三方库导入类并使其成为派生类(或类似的东西)

  28. 28

    我可以使用CloudKit Web服务或类似的东西访问标准的iOS Notes和Reminders的数据吗?

  29. 29

    q/kdb:如何将我的代码分成几行。是否有新的“转义”字符或类似的东西?

热门标签

归档