コールバックをクラスに保存しようとしています。現在、私は次のようなことをしています。
struct Callback {
    Callback (std::function<void ()> func) : func_ (func){}
    void call() const { func(); }
private:
    std::function<void ()> func_;
};
ご覧のとおり、特定のタイプの関数(現在は戻り値もパラメーターもありません)のみを使用できます。
このようなクラスを使用して、それを何と呼ぶかを渡す方法はありますか?
void increment (int &n) {
    ++n;
}
int main() {
    int someNum = 5;
    Callback callback (increment, someNum); //will call `increment (someNum);`
}
パラメータパックを使用して引数を格納し、aを使用しtypenameて戻り型を格納することを考えていました。次に、std::function<ReturnType (Args)> callback_ある種のものを作成し、のようなもので呼び出しましたcallback_ (givenArgs...);。しかし、私はこれを行うためのテンプレートについて十分な知識がありません。あるいは、それが可能かどうかさえ理解していません。
私がこれから(少なくとも今は)得ている本当の用途はタイマーですが、おそらくgeneric_function<>ラップする小さなクラスを作ることstd::function<>はもっと助けになるでしょう。ただし、この例では、2秒ごとに一時停止および一時停止を解除するタイマーは次のとおりです。
void togglePause (Countdown &c) {
    c.togglePause();
}
int main() {
    Countdown main (10000); //create countdown of 10s
    Countdown delay (2000, togglePause, main); //this one calls func when expired
    for (; !main.expired();) { //go while unpaused time < 10s
        delay.wait().reset(); //wait 2s, call callback, reset back to 2s
    }
}
もちろん、これは他の概念にも適用できますが、そもそもこの構文を実現する方法がわかりません。void関係のない前の質問からの戻り型が問題ない場合に備えて、2つの異なる形式を作成できますが、任意の数と種類の引数を使用して関数を格納すると、混乱します。可能であれば、このような構文をどのように使用できますか?そうでない場合、構文はどの程度近くなりますか?