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;
};

bar の初期化方法を確認するために対応する cpp ファイルにアクセスすることはできませんがmStrings、これは型の特性に関連していると思います。

foo.cppを正しく初期化するための構文はどのようになりますMyEnumType::mStringsか?

4

1 に答える 1

1

MyBaseEnumテンプレート化されたクラスと同様に、メンバーmStringsを別のソース ファイルで定義することはできません。定義にはテンプレート引数が必要なため、インクルードされているヘッダー ファイルで実行する必要があります。

構文は基本的に、他の文字列配列を定義する場合と同じです。

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