Q1) 私たちが持っていることを考えると
typedef double (*function_t)(double);
また
typedef std::function<double(double)> function_t;
どのように定義しますか
std::shared_ptr<function_t> ptr_func = ???
いくつかの機能のために。
すでに定義されているオブジェクトにa が必要だとしましょうshared_ptr
(今のところ、目的に反することを忘れていますが、これが必要です)。例として、 type のオブジェクトについて以下を考えてみましょうdouble
。
struct null_deleter
{
void operator() (void const *) const {};
};
int main()
{
// define object
double b=0;
// define shared pointer
std::shared_ptr<double> ptr_store;
ptr_store.reset(&b,null_deleter()); // this works and behaves how you would expect
}
shared_ptr
ただし、 a of typeに対して同じことを行うとfunction_t
、つまり
double f (double x)
{
// some_function + return
}
int main()
{
// define shared pointer
std::shared_ptr<function_t> ptr_store;
ptr_store.reset(&f,null_deleter()); // ERROR: does not work
}
返されるエラーは次のようなものです。
error: cannot convert 'double (*)(double)' to 'double (**)(double)' in initialization
またはの場合std::function
error: cannot convert 'double (*)(double)' to 'std::function<double(double)>*' in initialization
正しい型が渡されていないことは明らかであり、おそらくこれを行うことは許可されていません (?)
注:Windows MinGWのg++4-7-2
バージョンでコンパイル-std=c++11 -O3
いくつかの回答はうまくいきます。今日中に返信します。ここは朝の 6 時 30 分ですが、まだ寝ていません。私が実装しているものの全体の設計パターンはおそらく間違っています。うまくいけば、少し後で説明できます:|