std::list の operator ==
std::list には、 operator == が実装されているので、以下のようにリストが等しいかを比較することができる。
上のソースで Foo が、組み込み型の typedef だったりすると、上のソースはコンパイルできるが、ユーザ定義型の場合はコンパイルエラーとなる。
VC++ .NET だとこんな感じ。
#include <list>
int main(
int argc,
char** argv )
{
std::list<Foo> FooList1;
std::list<Foo> FooList2;
if ( FooList1 == FooList2 )
std::cout << "FooList1 == FooList2" << endl;
else
std::cout << "FooList1 != FooList2" << endl;
return 0;
}
c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\xutility(1078) : error C2678: 二項演算子 '==' : 型 'const std::allocator<_Ty>::value_type' の左オペランドを扱う演算子が見つかりません (または変換できません) (新しい動作; ヘルプを参照)。
with
[
_Ty=Foo
]
c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\xutility(1100) : コンパイルされたクラスのテンプレートのインスタンス化 'std::pair<_Ty1,_Ty2> std::mismatch<_InIt1,_InIt2>(_InIt1,_InIt1,_InIt2)' の参照を確認してください
with
[
_Ty1=std::list<Foo>::const_iterator,
_Ty2=std::list<Foo>::const_iterator,
_InIt1=std::list<Foo>::const_iterator,
_InIt2=std::list<Foo>::const_iterator
]
c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\list(980) : コンパイルされたクラスのテンプレートのインスタンス化 'bool std::equal<std::list<_Ty>::const_iterator,std::list<_Ty>::const_iterator>(_InIt1,_InIt1,_InIt2)' の参照を確認してください
with
[
_Ty=Foo,
_InIt1=std::list<Foo>::const_iterator,
_InIt2=std::list<Foo>::const_iterator
]
c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\list(987) : コンパイルされたクラスのテンプレートのインスタンス化 'bool std::operator ==<Foo,std::allocator<_Ty>>(const std::list<_Ty> &,const std::list<_Ty> &)' の参照を確認してください
with
[
_Ty=Foo
]
c:\work\LayOutManagerStep2\LayOutManager\LayOutView.cpp(1548) : コンパイルされたクラスのテンプレートのインスタンス化 'bool std::operator !=<Foo,std::allocator<_Ty>>(const std::list<_Ty> &,const std::list<_Ty> &)' の参照を確認してください
with
[
_Ty=Foo
]
// これだとコンパイルエラー inline bool operator == ( Foo& lhs, Foo& rhs ) { // 二つの値が等しいかどうかを返すコードは省略 } inline bool operator != ( Foo& lhs, Foo& rhs ) { return !( lhs == rhs ); }
inline bool operator == (
const Foo& lhs,
const Foo& rhs )
{
// 二つの値が等しいかどうかを返すコードは省略
}
inline bool operator != (
const Foo& lhs,
const Foo& rhs )
{
return !( lhs == rhs );
}
トラックバック
- このエントリーにトラックバック:
- http://frog.raindrop.jp/cgi-bin/mt/mt-tb.cgi/914
コメント