direct_sound_enumerate

id:mb2sync さんのアイデアで、direct_sound_enumerate()を実装してみました。

// ↓direct_sound.hppヘッダ内
namespace hamigaki { namespace audio {

namespace direct_sound
{

struct device_info
{
    std::string driver_guid;
    std::string description;
    std::string module_name;
};

} // namespace direct_sound

template<class Function>
Function direct_sound_enumerate(Function f);

} } // End namespaces audio, hamigaki.
// ↑ヘッダ終わり

struct device_name_print
{
    bool operator()(const ds::device_info& info) const
    {
        std::cout << info.description << std::endl;
        return false; // 列挙は終わっていない
    }
};

int main()
{
    audio::direct_sound_enumerate((device_name_print()));
}

これを使って、copy()とfind()を作ることにします。
ファンクタの戻り値はDirectSoundEnumerateと逆(列挙が終わった場合true)になっているので分かりにくいかもしれません。

#EnumChildWindows()もEnumFontFamiliesEx()も、みんな0以外で継続ですねぇ。やっぱり、こっちにあわせたほうがよいかも。