如何为函数指针编写正确的构造函数? 我在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;
}