c++ - 如何初始化 static const char* enum type traits 数组?

标签 c++ typetraits

我在外部 sdk 中遇到过这样的 header :

// external.h
//
template <class T> class MyBaseEnum
{
public: 
    /** String list. */
    static const char *mStrings[];

    //! Constructor.
    inline MyBaseEnum(){}  

    //! Destructor.
    inline ~MyBaseEnum()
    {

    }
};

我已经看到这个类在另一个 header 中的同一个 sdk 中使用,如下所示:

// foo.h
//
class Foo
{
    enum MyEnum 
    {
        A = 0,
        B,
        C
    };
    typedef MyBaseEnum< MyEnum > MyEnumType;

    MyEnumType bar;
};

我无法访问相应的 cpp 文件来查看 mStrings 是如何为 bar 初始化的,但我认为这与类型特征有关。

foo.cpp 中正确初始化 MyEnumType::mStrings 的语法是什么样的?

最佳答案

由于 MyBaseEnum 是一个模板类,mStrings 成员不能在单独的源文件中定义。它必须在包含的头文件中完成,因为定义需要模板参数。

语法与定义任何其他字符串数组基本相同:

template<class T>
const char* MyBaseEnum<T>::mStrings = { ... };

关于c++ - 如何初始化 static const char* enum type traits 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13618922/

相关文章:

c++ - 了解方法重载规则

c++ - 为什么使用 string_view 而不是广义的 container_view<T>?

c++ - std::is_constructible<T, Args> 是如何实现的?

c++ - 一个对象能知道它自己的常量吗?

c++ - 检查类是否是模板专用化(使用 bool 或 int 等模板参数)

c# - 无法添加对 WinRT C++ DLL 项目的引用

c++ - boost.build 与 boost.python

使用 gcc 的 c++ makefile - 从子文件夹列表生成源文件列表

c++ - 是否可以使用类型特征来检查类型是否是容器?

c++ - 如何在不使用 type_traits 的情况下检查复制构造函数是否为 noexcept?