gpt4 book ai didi

c++ - 将模板方法作为参数传递

转载 作者:搜寻专家 更新时间:2023-10-31 01:01:04 32 4
gpt4 key购买 nike

有人能帮我实现这段代码吗?

我需要将一个函数传递给另一个函数:

std::cout << process_time(Model::method1) << std::endl;

此函数获取作为模板类型的函数并在对象上调用它

template <typename F>
double process_time(F algorithm)
{
Model model;
double time=0;
do
{
// ...
time += model.algorithm(arg1);
} while (! stop_criteria);
return time;
}

请注意,method1 也是一个函数模板:

template <typename T>
double method1(std::vector<T> &v)
{
...
}

它的合法语法是什么?

主要.cpp

#include <iostream>
#include <vector>

class Model
{
public:

template <typename T>
double method1(std::vector<T> &v)
{
double t = 0;
//...
return t;
}

template <typename T>
double method2(std::vector<T> &v)
{
double t = 0;
//...
return t;
}

};

template <typename F>
double process_time(F algorithm)
{
Model model;
double time = 0;
bool stop_criteria = false;
do
{
std::vector<int> arg1;
// ...
time += model.algorithm(arg1);
} while (!stop_criteria);
return time;
}

int main()
{
std::cout << process_time(Model::method1) << std::endl;
return 0;
}

最佳答案

关键是method1是一个函数template:

template <typename T> double method1(std::vector<T>& );

因此,它不是一个函数……它是一个函数族。 process_time 需要一个函数,因此您只需将要使用的一个函数传递给它:

std::cout << process_time(method1<int>) << std::endl;

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

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