このコードはなぜですか
struct ThingComparator
{
...
}
static void Blah (set <CString> &things)
{
...
}
...
set<CString, ThingComparator>things;
Blah (things);
次のエラーでコンパイルに失敗します(Visual Studio 2010):
error C2664: 'Blah' : cannot convert parameter 1 from 'std::set<_Kty,_Pr>' to 'std::set<_Kty> &'
私のC ++の知識は明らかに限られていますが、信頼できる馬に乗ってポリモーフィズムの騎士を発表するトランペットを聞くことを期待していましたが、代わりに聞こえるのは馬のおならと悲しいトロンボーンだけです:-(
template<
class Key,
class Compare = std::less<Key>,
class Allocator = std::allocator<Key>
> class set;
したがって、std::set<CString>
実際にはを意味しstd::set<CString, std::less<CString>, std::allocator<CString>>
、でstd::less<CString>
はありませんThingComparator
。代わりに次のように書いてください。
struct ThingComparator {
...
};
template<typename Comparator>
static void Blah(std::set<CString, Comparator>& things) {
...
}
...
std::set<CString, ThingComparator> things;
Blah(things);
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加