Boost Iterator Facadeを使用してカスタム シングル パス イテレータを構築し、C API をラップして、Windows レジストリ キーに含まれる値を (C++ の方法で) 反復処理することができましたRegEnumValue
。
例えば:
// For each value 'v' under the given registry key 'hKey':
for (const auto& v : RegistryValueIterator(hKey))
{
...
}
基本的に、反復子のincrement
メソッドはパラメーターをRegEnumValue
増やして呼び出しdwIndex
ます (最初は反復子クラス コンストラクターで 0 に設定されます)。が返されると、それが「終了」反復子ERROR_NO_MORE_ITEMS
にマップされます。
私は使用しましたboost::single_pass_traversal_tag
:
class RegistryValueIterator
: public boost::iterator_facade< RegistryValueIterator,
RegistryValueEntry,
boost::single_pass_traversal_tag >
{
...
API を Windows 実装にdirectory_iterator
ラップするFindNextFile
Boost.Filesystemも、シングルパスイテレータとして実装されています。同様に、std::experimental::filesystem::directory_iterator
は入力反復子でもあります (前方反復子ではありません)。
では、レジストリの列挙で iterator カテゴリをForward Traversal Iteratorにアップグレードすることは可能でしょうか? その目標を達成するには、どのような手順に従う必要がありますか?
つまり、次のような Windows レジストリ API を使用して、Forward Traversal Iterator に必要なマルチパストラバーサルを実装することは可能でしょうRegEnumValue
か? もしそうなら、どのように?
PSレジストリ値の列挙/反復について説明しましたが、 APIを使用してレジストリキーを列挙/反復する場合も非常に似ています。RegEnumKeyEx