我想就模板参数重载模板类的 [] 运算符。像这样:
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
和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 编译器。