0

私は次のクラスを持っています:

template<class TYPE, class IDENTIFIER>
class Parameter
{
    TYPE typeValue;
    IDENTIFIER ID;
};

template<class IDENTIFIER>
class ParameterSystem
{
    template<typename TYPE>
    void AddParameter(Parameter<TYPE, IDENTIFIER> parameter, TYPE value);
};

ただし、AddParameter を使用しようとすると、関数のオーバーロードが引数リストに一致しないと表示されます。あらゆる種類の可能な組み合わせを試しました。たとえば:

typedef unsigned int               ResourceIndex; //I use unsigned ints to reference resources in my other(resource system)
typedef unsigned int               DefaultParameterID;
typedef Parameter<ResourceIndex, DefaultParameterID>     ResourceParameter;

だから私はこのようにそれを使用します:

ParameterSystem<DefaultParameterID> parameterSystem;
ResourceParameter param;
//do some stuff with param;
parameterSystem.AddParameter<ResourceIndex>(param, param.typeValue); //here it gives the error

そして、これは機能しません.Intellisenseは、それが引数リストと一致しないことを教えてくれます.興味のある方は、AddParameter が行うことは、typeValue の値を取得し、パラメーター システム内のマップ内の void ポインターに設定し、その値のマップ キーをパラメーターの ID と同期し、パラメーターにもハンドルがあることです。それは親パラメーターシステムなので、IDとタイプチェック+タイプキャストから、IDに応答するシステムのパラメーター値を常に取得できますが、それは私が思う質問には関係ありません...)

4

1 に答える 1

-1

関数の引数リストで、テンプレート タイプの前に「typename」を追加してみてください。

void AddParameter(typename Parameter<TYPE, IDENTIFIER> parameter, TYPE value) {...}
于 2013-03-15T12:41:04.580 に答える