在模板函数上设置默认参数(函数类型)

Set default argument(function type) on template function

本文关键字:函数 参数 类型 默认 设置      更新时间:2023-10-16

我有一个模板函数,有几个std::function类型参数,我想默认其中一个参数,这样其他调用它的程序就不需要指定输入参数。例如:

template<class T1, class T2>
dataStruct<T1, T2> foo(std::function<T2(T1, T1)> param_1, 
                       std::function<T2(T1, T1)> param_2,
                       std::function<double(T1, T1)> param_3) {...}

我想将param_3设置为默认值1.0,所以如果我想调用这个模板函数,我只需要像这样调用它:

dataStruct<int, int> solution = foo(input_fun1, input_fun2);

,这样我就不需要指定param_3,如果它的值只是默认的1.0。我知道我可以用更少的参数重载它,但是有办法跳过这个重载吗?像设置默认值在这个模板函数直接吗?std::function<double(T1, T1)> param_3 = setToOne()像这样?

您可以使用lambda作为默认参数:

template<class T1, class T2>
dataStruct<T1, T2> foo(std::function<T2(T1, T1)> param_1,
                       std::function<T2(T1, T1)> param_2,
                       std::function<double(T1, T1)> param_3 = [](T1, T1) { return 1.0; })
{
    //...
}

我想将param_3设置为默认值1.0

我认为你做不到。std::function<double(T1, T1)>不能为1.0。一种方法是重载函数。

template <class T1, class T2>
dataStruct<T1, T2> foo(std::function<T2(T1, T1)> param_1, 
                       std::function<T2(T1, T1)> param_2,
                       double param_3 = 1.0) { ... }