インスタンス メソッドまたはラムダ関数が必要です。または、select 関数の引数として scandir に渡されるのと同等です。これを行う方法はありますか?
私が達成しようとしている重要なことは、select 関数 (コールバック) が、それを呼び出すクラスのインスタンスごとに異なるパラメーターを参照するようにすることです。これをスレッドセーフにするために、またはひどく醜くならないようにするために、パラメーターをグローバル変数に格納することはできません。それがクラスインスタンスの目的です。
C++11 でラムダ関数を使用すると、次のようになります。
myclass:getFilesMatching(char startChar)
{
...
mParam = startChar;
auto lfunc = [this] (const struct dirent * dent) { return (*(dent->d_name) == mParam); };
mNumFiles = scandir((char *)fullDirPath, &mfileList, lfunc, NULL);
}
これにより、名前が指定された文字で始まるすべてのファイルが取得されます。関数にローカル変数またはインスタンス変数を渡すかどうかは気にしません。
scandir 自体がスレッドセーフであることを願っています。もちろん、セマフォやミューテックスを使用することもできますが、それは本当に必要なのでしょうか?
もちろん、これは select 関数の単純な例にすぎません。私が実際にやりたいことはもっと複雑です。