如何设置依赖于其他参数的参数默认值
How do I set parameter default values that rely on other parameters?
以下代码按预期编译和工作。
#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;
}
不是更容易吗?
相关文章:
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 如何从其他功能C++访问参数?
- C++ 默认参数使用其他参数
- 如何将将参数包作为参数传递给其他模板类的模板类?
- lambda 作为接受其他参数的参数的初始化顺序
- 如何在其他类中使用参数化构造函数制作类的对象?
- 模板参数包如何具有其他尾随参数?
- 在C++单元测试上下文中,抽象基类是否应将其他抽象基类作为函数参数
- 了解'this'或其他参数是否为右值
- 使用其他模板类型参数作为要在函数签名中使用的类型别名声明
- 推断大多数模板对象的参数,但在调用模板函数时对其他对象显式
- 当模板类使用参数包时,如何传递其他模板参数
- 如何将char数组声明为函数参数?或告诉我此代码中还有其他问题?
- 递归回文检查,不使用向量、大小或其他参数
- 将成员函数作为参数传递给其他成员函数 (C++ 11 <function>)
- 依赖于其他模板参数的模板参数
- 传递多个参数的功能,该函数将类包含到其他函数
- 将指针类方法作为参数传递给其他类方法C
- 如果创建支持返回可变参数类型列表的通用模板 API,我应该使用 std::tuple 还是其他东西?
- 如何根据枚举参数返回其他类型