1

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ラップするFindNextFileBoost.Filesystemも、シングルパスイテレータとして実装されています。同様に、std::experimental::filesystem::directory_iterator入力反復子でもあります (前方反復子ではありません)。

では、レジストリの列挙で iterator カテゴリをForward Traversal Iteratorにアップグレードすることは可能でしょうか? その目標を達成するには、どのような手順に従う必要がありますか?

つまり、次のような Windows レジストリ API を使用して、Forward Traversal Iterator に必要なマルチパストラバーサルを実装することは可能でしょうRegEnumValueか? もしそうなら、どのように?


PSレジストリ値の列挙/反復について説明しましたが、 APIを使用してレジストリキーを列挙/反復する場合も非常に似ています。RegEnumKeyEx

4

0 に答える 0