std::asyncを使って、基底クラスから派生クラスの中にあるメンバ関数を非同期動作させるってそもそも可能なんだろうか。
/usr/include/c++/v1/future:2193:1: note: candidate template ignored: substitution failure [with _Fp = void (CAudioManagerALSA::*)(), _Args = <CAudioManager *>]: no type named 'type' in 'std::__invoke_of<void (CAudioManagerALSA::*)(), CAudioManager *>'
async(launch __policy, _Fp&& __f, _Args&&... __args)
多分、thisのクラスとplay_audioの所属するクラスが違うので許さん、という話だと思うんだけど…派生先のクラスでstd::async()を呼び出すので動作としてはヘンなことしてないはす。
※C++よく分からないので滅茶苦茶書いてるかも
基底クラスからstd::async()使って派生先の何かを動かすんじゃなく、「派生先でstd::async()使って派生先の何かを動かす」という派生先のコードを基底クラスから呼ぶ、という作りの方が良いのかも。冗長かもしれんけど。
試してみてもうまくいかなかった以上、クラスのメンバ関数のaudio API依存部分を別ファイルに切り出して実装するという、割と原始的な方法で進めようかなーって考えてる。
実行時にAPIを切り替える必要は無いし、別にAPI毎にクラスを用意する必要も無い…C++だからといって必ずクラス化しなきゃいけないって訳でもないし。
@uaa 的外れだったらすみませんが、 NVI (Non-Virtual Interface) というイディオムが参考になるかもしれません