パラメータパックを使いたいのですが、問題が見つかりました。いくつかのコード:
template <typename Function, typename... Args>
auto f(Function func, Args... args) -> decltype(func(args...))
{
auto f11 = std::bind(func, args...);
f11();
}
void print(const char* string)
{
std::cout << string << std::endl;
}
これはすべてうまくいきます:
f([] (const char* additional, const char* more) {
std::cout << "hello ( " << additional << ", " << more << " )" << std::endl;
}, "additional text", "and one more");
auto printFunction = std::bind(&print, std::placeholders::_1);
printFunction("hello from print bind");
f(print, "hello from print directly");
しかし、std::function をパラメーター パックに渡したい場合:
f([] (std::function<void(const char*)> printParamFunc) {
printParamFunc("hello from print from std::function");
}, printFunction);
アプリケーションはコンパイルされなくなります。
では、パックのパラメータとして関数を使用する問題は何ですか?
ありがとう。
更新: f のコードを次のように変更した場合:
template <typename Function, typename... Args>
auto f(Function func, Args... args) -> decltype(func(args...))
{
func(args...);
}
うまく機能しますが、ここでこの関数を実行したくありません。関数を作成して、param のように渡したいのです。
UPDATE2: コード実行例: http://ideone.com/gDjnPq
UPDATE3: コンパイル エラーでコードをクリア: http://ideone.com/50z7IN