如何为函数指针编写正确的构造函数? 我在C++模板元编程后编写了一个简单的浮点(浮点)函数对象: class float\u func { 结构基{ 虚拟浮点运算符()(浮点a)=0; }; 模板 类包装器:公共基{ 公众: 包装器(F&F):F_F(F){} 虚拟浮点运算符()(浮点a){ 返回f_(a); } 私人: F_; }; 公众: 模板float_func(F&F):funobj_(新包装器(F)){} 浮点运算符()(浮点a){ 报税表(*funobj_)(a); }; 私人: 基地*funobj_; };

如何为函数指针编写正确的构造函数? 我在C++模板元编程后编写了一个简单的浮点(浮点)函数对象: class float\u func { 结构基{ 虚拟浮点运算符()(浮点a)=0; }; 模板 类包装器:公共基{ 公众: 包装器(F&F):F_F(F){} 虚拟浮点运算符()(浮点a){ 返回f_(a); } 私人: F_; }; 公众: 模板float_func(F&F):funobj_(新包装器(F)){} 浮点运算符()(浮点a){ 报税表(*funobj_)(a); }; 私人: 基地*funobj_; };,c++,templates,functional-programming,C++,Templates,Functional Programming,我想这样使用它: #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)(f

我想这样使用它:

#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;
}
#包括
#包括
#包括“my_float_fun.h”
结构FunObject{
浮点运算符()(浮点a)常量{
返回a+1;
}
};
浮点函数(浮点a)
{
返回a-1;
};
类型定义浮动(*FuncPtr)(浮动a);
int main()
{
funobj;
FuncPtr ptr=&Func;
float_func a=obj;
float_func b=ptr;
//float_func c=&func;未编译
std::函数d=&Func;

std::cout您应该在
float_func
wrapper
构造函数中使用
const F&
,或者简单地使用
F
,因为
&func
是右值的,不能转换为引用。

float_func b=ptr;
不会做您认为它做的事情。
模板float_func(F&F):funobj(新包装(F)){}
其中
F
FuncPtr
而不是
float
。另外,你想解决什么问题,你写了所有这些而不是仅仅使用
base
?@kfsone:我把F作为FuncPtr;我只是在学习类型擦除。
#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;
}