0

我在外部 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.cpp正确初始化的语法是什么样的MyEnumType::mStrings

4

1 回答 1

1

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

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

template<class T>
const char* MyBaseEnum<T>::mStrings = { ... };
于 2012-11-29T08:42:27.140 回答