以下代码按预期编译和工作。
#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;
}
但是,我希望根据前一个参数推导出size参数的默认值。例如:
void function(std::vector<int> vec, int size=vec.size());
但是这会导致:
错误:本地变量'vec'可能不会出现在此上下文中
这并不让我感到惊讶;我假设它需要在编译时知道默认值。那么我是否将函数模板化?我如何使函数模板化,使参数仍为int,并且向量仍然是int的向量,并且size参数被推导为默认传递向量的大小。
我不想在函数调用期间传递向量的大小。
答案 0 :(得分:4)
如果你真的想要一个带有size参数的函数,并希望大小默认为向量大小(而不是仅仅将它作为局部变量),那么你可以用 two 来解决这个问题。功能。一个只取向量,一个取矢量和大小(没有默认值)。然后单参数函数可以调用第二个。
所以
void function(const std::vector<int>& vec, const size_t size)
{
...
}
void function(const std::vector<int>& vec)
{
function(vec, vec.size());
}
答案 1 :(得分:1)
如果基于第一个参数,为什么还需要第二个参数?
void function(std::vector<int> vec ){
size_t size = vec.size();
//code..
return;
}
不是更容易吗?