我在外部sdk中遇到了标头,如下所示:

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

    //! Constructor.
    inline MyBaseEnum(){}

    //! Destructor.
    inline ~MyBaseEnum()
    {

    }
};


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

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

    MyEnumType bar;
};


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

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

最佳答案

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

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

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

关于c++ - 如何初始化静态const char *枚举类型特征数组?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13618922/

10-15 05:48