如何设置依赖于其他参数的参数默认值

How do I set parameter default values that rely on other parameters?

本文关键字:参数 其他 默认值 依赖于 何设置 设置      更新时间:2023-10-16

以下代码按预期编译和工作。

#include <vector>
void function(std::vector<int> vec, int size=1);
int main(){
    std::vector<int> vec = {1,2,3};
    function(vec);
}

void function(std::vector<int> vec, int size){
    //code..
    return;
}

但是,我希望根据以前的参数推断出大小参数的默认值。所以例如:

void function(std::vector<int> vec, int size=vec.size());

但这会导致:
错误:局部变量"vec"可能不在此上下文中出现

这并不让我感到惊讶;我假设它需要在编译时知道默认值。 那么我是否使函数模板化? 我将如何使函数模板化,使参数仍然是 int,而向量仍然是整数的向量,并且默认情况下,size 参数被推导出为传入的向量大小。

我不想在函数调用期间传入矢量的大小。

如果你真的想要一个带有 size 参数的函数,并且希望 size 默认为向量大小(而不仅仅是将其作为局部变量),那么你可以用两个函数来解决这个问题。一个只取向量,另一个取向量和大小(无默认值)。然后,单参数函数可以只调用第二个参数。

所以

void function(const std::vector<int>& vec, const size_t size)
{
   ...
}
void function(const std::vector<int>& vec)
{
   function(vec, vec.size());
}

如果第二个参数基于第一个参数,为什么还需要第二个参数?

    void function(std::vector<int> vec ){
        size_t size = vec.size();
        //code..
        return;
    }

不是更容易吗?