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

旧城冷巷雨未停 提交于 2019-12-12 07:24:25

问题


The following code compiles and works as expected.

#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;
}

However, I would like the size parameter's default value to be deduced based on a previous parameter. So for example:

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

But this however results in:
error: local variable ‘vec’ may not appear in this context

Which doesn't surprise me; I assume it needs to know the default value at compile time. So do I make the function templated? How would I make the function templated in such a way that the parameter is still an int, and the vector, is still a vector of ints, and the size parameter is deduced to be the passed in vector's size by default.

I would not like to have to pass in the size of the vector during the function call.


回答1:


If you truly want a function with a size parameter, and want the size to default to the vector size (instead of just getting it as a local variable), then you could solve this with two functions. One taking just the vector, and one taking the vector and the size (without default). Then the one-argument function can just call the second.

So

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

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



回答2:


Why do you need second parameter if it based on the first?

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

Isn't it easier?



来源:https://stackoverflow.com/questions/19830677/how-do-i-set-parameter-default-values-that-rely-on-other-parameters

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!