テンプレート パラメータに関して、テンプレート クラスの [] 演算子をオーバーロードしたいと思います。そのようです:
template<
typename T,
template<typename> class Property,
template<typename> class Key1,
template<typename> class Key2>
class a_map
{
public:
const Property<T>& operator[](const Key1<T>& k) const
{ return _values[k.index()]; }
const Property<T>& operator[](const Key2<T>& k) const
{ return _values[k.index()]; }
protected:
std::vector<Property<T> > _values;
};
このクラスを次のように使用します。
int main()
{
a_map<float, prop, key_a, key_b> pm;
}
_values
基本的に、型をあまり気にせずにベクター内の要素にアクセスできるようにしたいと考えていKey
ます。index()
重要なのは、メンバーがいるということだけです。
ただし、次のエラーが表示されます
エラー C2535: 'const Property &a_map::operator [](const Key1 &) const': メンバー関数は既に定義または宣言されています
key_a
とは 2 つのまったくkey_b
異なるタイプのクラス テンプレートですが。
何か不足していますか?コンパイラは、特定の状況Key1<T>
でKey2<T>
実際に同じ型になる可能性があることを恐れていますか?
編集
これらは、で使用されるクラス テンプレートです。main
template<typename T>
struct prop
{
T weight;
T height;
};
template<typename T>
class key_a
{
public:
int index() { return _i; }
private:
int _i;
};
template<typename T>
class key_b
{
public:
int index() { return 3; } // Always return 3
編集 MVC++ 2008 コンパイラを使用しています。