我正在尝试[]
为一个类实现类似矢量和类似地图的运算符。但我从我的编译器(g++ 和 clang++)收到错误消息。发现它们仅在该类还具有将运算符转换为整数类型时才会发生。
现在我有两个问题。首先是我不知道为什么编译器无法区分[](const std::string&)
以及[](size_t)
何时类具有转换运算符到整数。第二个......我需要转换和索引运算符。如何解决?
作品:
#include <stdint.h>
#include <string>
struct Foo
{
Foo& operator[](const std::string &foo) {}
Foo& operator[](size_t index) {}
};
int main()
{
Foo f;
f["foo"];
f[2];
}
不起作用:
#include <stdint.h>
#include <string>
struct Foo
{
operator uint32_t() {}
Foo& operator[](const std::string &foo) {}
Foo& operator[](size_t index) {}
};
int main()
{
Foo f;
f["foo"];
f[2];
}
编译器错误:
main.cpp: In function 'int main()':
main.cpp:14:9: error: ambiguous overload for 'operator[]' in 'f["foo"]'
main.cpp:14:9: note: candidates are:
main.cpp:14:9: note: operator[](long int, const char*) <built-in>
main.cpp:7:7: note: Foo& Foo::operator[](const string&)
main.cpp:8:7: note: Foo& Foo::operator[](size_t) <near match>
main.cpp:8:7: note: no known conversion for argument 1 from 'const char [4]' to 'size_t {aka long unsigned int}'