std::function
メンバーとoperator()
というメンバーを呼び出すクラスを作成しようとしています。ここに私が試したものです:std :: functionをカプセル化する方法
template <class R, class... Args>
class Func{
public:
Func(std::function<R(Args...)> fnx) : fn(fnx) {} //Error
R operator()(Args... a) { return fn(a...); } //Error
private:
std::function<R(Args...)> fn; //Error
};
しかし、私は私がいずれも表示されない---神秘的なエラーに私は理解していないことをError
として示さラインで
error: function returning a function
を取得関数が返されます。どこにありますか、どのように修正できますか?
フルに動作していない例:Args...
が空の間、このラインで http://coliru.stacked-crooked.com/a/603a84184d9666a8
#include <iostream>
#include <functional>
int foo(int a, int b) { return a+b; }
template <class R, class... Args>
class Func{
public:
Func(std::function<R(Args...)> fnx) : fn(fnx) {}
R operator()(Args... a) { return fn(a...); }
private:
std::function<R(Args...)> fn;
};
Func<int(int,int)> foox;
int main() {
std::cout << foox(2,4);
return 0;
}
参照してください:私はMCVEを含まなかった – cubuspl42
http://stackoverflow.com/help/mcveを、私はしませんでしたか? – CygnusX1
まあ、そうではありません。クラスそのもののコード自体は問題なく、それは質問に含まれるコードだけでした。私はエラーを見つけるために外部サイトに行く必要があった。私が理解しているように、外部サイトへのリンクは追加するだけですが、最小限の作業例は質問自体の一部でなければなりません。今やちょっと修正されました(ただし、コードを複製する必要があるかどうかはわかりません)。 – cubuspl42