Jak ustawić domyślne wartości parametrów, które zależą od innych parametrów?
Poniższy kod kompiluje się i działa zgodnie z oczekiwaniami.
#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;
}
Chciałbym jednak, aby domyślna wartość parametru wielkości została wydedukowana na podstawie poprzedniego parametru. Na przykład:
void function(std::vector<int> vec, int size=vec.size());
Ale to jednak powoduje:
error: lokalna zmienna „vec” może nie pojawić się w tym kontekście
Co mnie nie dziwi; Zakładam, że musi znać wartość domyślną w czasie kompilacji. Czy sprawię, że funkcja będzie szablonowana? W jaki sposób uczyniłbym funkcję szablonowaną w taki sposób, że parametr nadal jest int, a wektor nadal jest wektorem ints, a parametr wielkości jest domyślnie wydedukowany jako wielkość w wektorze.
Nie chciałbym przekazywać rozmiaru wektora podczas wywołania funkcji.