クラスのベクトルのような演算子とマップのような演算子を実装しようとしています[]
。しかし、コンパイラ (g++ および clang++) からエラー メッセージが表示されます。クラスに整数型への変換演算子もある場合にのみ発生することがわかりました。
今、私には2つの問題があります。1 つ目は、クラスに int への変換演算子がある場合[](const std::string&)
と、コンパイラが区別できない理由がわからないことです。[](size_t)
2 つ目は、変換とインデックス演算子が必要です。それを修正する方法は?
作品:
#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}'