std::function
を返す関数を実装しようとしていますが、これは任意の数のパラメータを取得する可能性があります。可変長std ::関数を使用したC++ 11の関数シグネチャ
私は以下を試しましたが、コンパイルされず、エラーの意味を理解できません。
template <typename ...Args>
void ThrowOnError(std::function<int(Args...)> func, Args... args)
{
int err = func(args...);
if (err < 0)
throw std::exception();
}
int f()
{
return 42;
}
int f(int x)
{
return x;
}
int main()
{
ThrowOnError(f);
ThrowOnError(f, 1);
}
私はヘッダにテンプレート機能を移動しようとしたが、それは動作しませんでした、私はf(int x)
機能をコメントアウトしてのみだけf
でコールを残す場合も、私はまだno matching overloaded function found
と'void ThrowOnError(std::function<int(Args...)>,Args...)': could not deduce template argument for 'std::function<int(Args...)>' from 'int (int)'
を取得ここでの問題は何ですか?私はこの機能で何が欠けていますか?
P.S - 私は可能な限りstd::function
を受け取り、ファンクタタイプに別のタイプ名を追加しないようにしたいと思います。
OK、これは動作しません'typename F、typename ... Args'も同様です。どのように達成することができますか? – ZivS
@ZivS詳細を追加しました。答えのために – skypjack
ありがとう。あなたの編集について:http://english.stackexchange.com/questions/1016/do-you-use-a-or-an-before-acronyms – ZivS