私は型の列挙型を持っていて、型名を出力するために "to_string"関数を使いたいので自分の名前空間に書きました。問題は、to_stringを呼び出すためにネームスペース内の他の関数、例えばint(enumの一部ではないint)がカスタムto_stringを見つけて、enumの無効な初期化についてエラーを出していることです。コンパイル時にenumクラスをintから初期化しようとしています
to_stringではなくstd :: to_stringを明示的に呼び出すことができますが、より良い方法があると思います。私は間違って何をしていますか?
Hereはサンプルコードです:
#include <iostream>
#include <string>
namespace other {
enum class Type {
Type1,
Type2
};
std::string to_string(const Type& type) {
switch(type) {
case Type::Type1:
return "Type1";
break;
case Type::Type2:
return "Type2";
break;
default:
{}
}
return "Unknown";
}
void run() {
using namespace std;
cout << string("Type: ") + to_string(Type::Type1) << endl;
cout << string("int: ") + to_string(42) << endl; // this one generates compile-time errors
}
}
int main() {
other::run();
using namespace std;
cout << string("int: ") + to_string(42) << endl; // This one is ok
return 0;
}
私は物事を見ています...もっと具体的にすることができれば、それをしてください。例えば 'run()'の中では、 'other :: to_string'と' std :: to_string'とタイプして、それを編集する次の貧しい人が私の意図したものを正確に知るようにします。良い質問ですが、以前はネームスペースを隠す/過負荷とは考えていませんでした。 – Matt