其他分享
首页 > 其他分享> > c-将模板方法作为参数传递

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

作者:互联网

可以帮助我如何实现此代码吗?

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

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)
{
    ...
}

它的法律语法是什么?

main.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;
}

解决方法:

这是最接近您要编译的代码的代码:

#include <iostream>
#include <vector>

struct Model {
  template <typename T>
  double method1(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<int>) << std::endl;
}

标签:argument-passing,c,c11,templates
来源: https://codeday.me/bug/20191011/1893493.html