Q1)鉴于我们有
typedef double (*function_t)(double);
或者
typedef std::function<double(double)> function_t;
我们如何定义
std::shared_ptr<function_t> ptr_func = ???
对于某些功能。
假设我们想要一个shared_ptr
已经定义的对象(现在忘记它违背了目的 - 但我需要这个)。作为示例,请考虑以下类型的对象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
}
虽然如果我们对 ashared_ptr
类型做同样的事情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,我还没睡。我正在实施的整个设计模式可能是错误的,希望我能稍后解释一下:|