STL のような反復子を作成しようとしているコレクションのような COM インターフェイスがたくさんあります。私はイテレータを機能させて特殊begin()
化end()
し、イテレータを返すようにしました。すべてが完璧に機能します!ただし、 を使用しようとするとbegin(std::vector)
、非常に一般的な の特殊化が使用されますbegin()
。これらの COM オブジェクトはベース コレクション オブジェクトから拡張されていないため、最初に試したのは次のとおりです。
template< class CollType >
CollectionIterator<CollType> begin( CollType coll )
begin()
過負荷の解決が に適したものを選択しない理由はわかりましstd::vector
たが、これを修正する方法がわかりません。
coll
残念ながら、パラメーターを特殊化するためのベース コレクション クラスがありません。適切なメンバーが存在する場合にのみ、これらの特殊化を解決するために SFINAE のようなものが必要だと思います。私は試した:
template<
class CollType,
typename std::enable_if< std::is_member_pointer< decltype(&CollType::GetItem) >::value >::type
>
CollectionIterator<CollType> begin( CollType coll )
(GetItem
は のメソッドCollType
)
ほんの一握りのバリエーションだけでなく、役に立たない。さらに悪いことに、これらのコレクションは COM スマート ポインターであるためGetItem
、スマート ポインターのメンバーとして実際に登録されるかどうかはわかりません。
正しい方向への洞察は素晴らしいでしょう。私は主にこれでぐるぐる回っています。