0

一般的なプロパティ テンプレートを作成しました。各プロパティは、float、int、string などの 1 つの値のみです。プロパティがインスタンス化されると、プロパティ マネージャー シングルトンに自身を登録しようとします。しかし、PropertyManager::AddProperty() メソッドにプロパティを取得させる方法がわかりません。プロパティにタイプ名が必要であることを示すメッセージでエラーが発生し続けます。これは通常どのように行われますか?

template <typename T> class Property
{
public:
    Property(T value)
    { 
        mID = ThePropertyManager->AddProperty( Property* p ); 
    } 
        T mValue;
    ULONG mID;
}
4

3 に答える 3

0

これ

    mID = ThePropertyManager->AddProperty( Property* p ); 

2つの点で無効な構文です。

    mID = ThePropertyManager->AddProperty(this); 

AddPropertyコードの残りの部分を見ずに確認するのは難しいですが、それ自体がテンプレート化されている限り、これは機能するはずです。

また、おそらくmValueコンストラクターで初期化する必要があります。

Property(T value) : mValue(value)
{ 
    ...
} 
于 2012-08-13T16:50:28.993 に答える
0

PropertyManagerクラスには、プロパティのさまざまなインスタンス化を行うテンプレートメンバー関数を含めることができます。

class PropertyManager
{
public:
    template <class TY> ID AddProperty(Property<Ty>&);
};

サンプルコードが正しくないことにも注意してください。

mID = ThePropertyManager->AddProperty( Property* p );

次のようになります。

mID = ThePropertyManager->AddProperty(this);
于 2012-08-13T16:50:48.387 に答える
0

テンプレート化された型を持たないProperty抽象基本クラスから継承し、引数を受け入れることができます。これは、int、floatなどをすべて一緒に使用している場合、複数のテンプレートクラスもサポートします。AbstractPropertyPropertyManagerAbstractPropertyPropertyProperty

テンプレート化されたプロパティマネージャーが必要になる道を進んでいるように聞こえますが。

于 2012-08-13T16:52:08.090 に答える