2
のために私はそれがcheck if member exists using enable_ifが存在する場合、コールバックを登録するには、このトリックを使用しようとしました。それはCallback
が登録ルーチンではなく、クラステンプレートの一部なのか?はSFINAEコールバック登録
のために私はそれがcheck if member exists using enable_ifが存在する場合、コールバックを登録するには、このトリックを使用しようとしました。それはCallback
が登録ルーチンではなく、クラステンプレートの一部なのか?はSFINAEコールバック登録
周囲のクラスタイプパラメータに依存しているため、SFINAEが失敗します。 SFINAEは、コンパイラが呼び出しに基づいて把握しようとする関数型の引数である演繹型の引数に対してのみ機能します。
コンパイラが明示的に取得し、その後、むしろ推測しますSFINAEがSに基づいてtemplate<class S = Callback, typename cb_test<decltype(S::barEvent)>::type=0>
void barEventRegister(has_member)
、:
修正は次のようになります。
また、2回目のオーバーロードには、ではなく、has_not_member
が必要です。今のように、メンバが存在していても、テンプレート以外のオーバーロードが選択されるため、メンバが存在しても常に選択されます。