gpt4 book ai didi

c++ - 函数作为模板参数

转载 作者:行者123 更新时间:2023-11-28 05:14:54 26 4
gpt4 key购买 nike

我试图通过编写模板函数来避免这种重复代码。

#include <algorithm>
class X {

public:
void get_amin(double *a){}
void set_amin(double a){}

void get_bmin(double *b){}
void set_bmin(double b){}

//...many pairs like above

};
int main(){
X *x1 = new X;
X *x2 = new X;

//code that will be repeated
{
double x1_amin;
x1->get_amin(&x1_amin);
double x2_amin;
x2->get_amin(&x2_amin);
x1->set_amin(std::min(x1_amin, x2_amin));
}
//repeatation
{
double x1_bmin;
x1->get_bmin(&x1_bmin);
double x2_bmin;
x2->get_bmin(&x2_bmin);
x1->set_bmin(std::min(x1_bmin, x2_bmin));
}
//
delete x1;
delete x2;
}

现在我的尝试如下。看来我能够编写模板但不能使用它。 stack overflow 上的其他帖子主要关注如何编写模板。我也找不到使用类成员函数的示例。

#include <algorithm>
#include <functional>
class X {

public:
void get_amin(double *a){}
void set_amin(double a){}

void get_bmin(double *b){}
void set_bmin(double b){}

//...many pairs like above

};

template <typename F11,typename F12, typename F2>
void templatisedFunction(F12 f11,F12 f12,F2 f2)
{
double x1_amin;
f11(&x1_amin);

double x2_amin;
f12(&x2_amin);

f2(std::min(x1_amin, x2_amin));
}

int main(){

X *x1 = new X;
X *x2 = new X;

//templatisedFunction(x1->get_amin,x2->get_amin,x1->set_amin);
//templatisedFunction(x1->get_amin(double*),x2->get_amin(double*),x1->set_amin(double));


//templatisedFunction<x1->get_amin(double*),x2->get_amin(double*),x1->set_amin(double)>();
//templatisedFunction<x1->get_amin,x2->get_amin,x1->set_amin>();

std::function<void(X*)> memfun(&X::get_amin);//not sure here
//templatisedFunction<x1->get_amin,x2->get_amin,x1->set_amin>();

//
delete x1;
delete x2;
}

最佳答案

void (X::*getf)(double *)void (X::*setf)(double) 是指向两个指针的函数签名您需要的成员函数。

使用 C++11:

int main()
{
X x1;
X x2;

auto lamb = [&](void (X::*getf)(double *), void (X::*setf)(double))
{
double x1_amin;
(x1.*getf)(&x1_amin);
double x2_amin;
(x2.*getf)(&x2_amin);
(x1.*setf)(std::min(x1_amin, x2_amin));
};

lamb(&X::get_amin, &X::set_amin);
lamb(&X::get_bmin, &X::set_bmin);
return 0;
}

关于c++ - 函数作为模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42866767/

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