gpt4 book ai didi

c++ - 如何仅为函数指针编写正确的构造函数?

转载 作者:行者123 更新时间:2023-11-30 04:12:06 24 4
gpt4 key购买 nike

我按照c++ 模板元编程写了一个简单的float(float) 函数对象:

class float_func
{
struct base {
virtual float operator()(float a) = 0;
};

template <typename F>
class wrapper : public base {
public:
wrapper(F& f) : f_(f) { }
virtual float operator()(float a) {
return f_(a);
}
private:
F f_;
};

public:
template <typename F> float_func(F& f) : funobj_(new wrapper<F>(f)) {}
float operator()(float a) {
return (*funobj_)(a);
};
private:
base* funobj_;
};

我想像这样使用它:

#include <iostream>
#include <functional>
#include "my_float_fun.h"

struct FunObject {
float operator()(float a) const {
return a + 1;
}
};

float Func(float a)
{
return a - 1;
};

typedef float (*FuncPtr)(float a);

int main()
{
FunObject obj;
FuncPtr ptr = &Func;
float_func a = obj;
float_func b = ptr;
// float_func c = &Func; not compile
std::function<float(float)> d = &Func;
std::cout << a(1) << b(2) << std::endl;
return 0;
}

但是注释掉的那行编译不了。另一方面,std::function 运行良好。

我应该如何修改我的 float_fun 类以仅支持函数指针本身 (&Func) 而不是函数指针对象 (ptr)?

最佳答案

您应该在float_funcwrapper 构造函数中使用const F&,或者简单地使用F,因为&Func 是右值,不能转换为引用。

关于c++ - 如何仅为函数指针编写正确的构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19948147/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com