我在外部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
的语法是什么样的?
答案 0 :(得分:1)
由于MyBaseEnum
是模板化类,mStrings
成员无法在单独的源文件中定义。它必须在包含的头文件中完成,因为定义需要模板参数。
语法与定义任何其他字符串数组基本相同:
template<class T>
const char* MyBaseEnum<T>::mStrings = { ... };