如何初始化静态const char * enum类型traits数组?

时间:2012-11-29 04:37:56

标签: c++ typetraits

我在外部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文件,看看如何为bar初始化mStrings,但我认为这与类型特征有关。

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

1 个答案:

答案 0 :(得分:1)

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

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

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