operator bool
とoperator void*
のクラスを作成しようとしましたが、コンパイラはあいまいであると言います。どのような演算子を使用するのか、あるいはその両方を持つことができないのか、コンパイラに説明できる方法はありますか?演算子void *と演算子boolの両方を定義します
class A {
public:
operator void*(){
cout << "operator void* is called" << endl;
return 0;
}
operator bool(){
cout << "operator bool is called" << endl;
return true;
}
};
int main()
{
A a1, a2;
if (a1 == a2){
cout << "hello";
}
}
ていますか? 'operator void *'はやや安全な '演算子bool'として機能します。なぜならあなたは間違って' void * 'で行うことができる悪い事が少ないからです。また、悪用をさらに最小限に抑える安全なboolイディオムについては、googleを使用してください(間違っていない場合は、 'operator pointer-to-member'を定義します)。 – UncleBens
実際、ifstreamのために用意した答えを参考にしています。私はなぜオペレータvoid *がオペレータboolの前に呼び出されたのだろうと思っていましたが、私がこれをしたときにはあいまいでした。 – Default