Не могу отправить NULL функции, получающей вектор - PullRequest
4 голосов
/ 13 сентября 2011

У меня есть эта функция:

    void RegMatrix::MatrixInit(int numRow,int numCol, std::vector<double> fill)

    {

      do something;

    }

и я хочу отправить это:

MatrixInit(numRow,numCol,NULL);

как я могу передать NULL как вектор?

Ответы [ 4 ]

11 голосов
/ 13 сентября 2011

Вы не можете передать NULL в качестве вектора, вместо этого вы можете передать пустой вектор следующим образом:

MatrixInit( numRow, numCol, std::vector<double>() )

Обратите внимание, что вам лучше взять вектор fill за const&.

9 голосов
/ 13 сентября 2011

Чтобы передать NULL, вам нужно изменить свой параметр, чтобы вместо него принимать указатель vector*, например:

void RegMatrix::MatrixInit(int numRow, int numCol, std::vector<double> *fill)
{
    if (fill != NULL)
    {
        do something with fill;
    }
}

Когда вам нужно передать вектор, вы должны сделатьэто так:

std::vector<double> v;
MatrixInit(numRow, numCol, &v); 
0 голосов
/ 14 сентября 2011

Вы можете сделать тип аргумента boost::optional<std::vector<double> >

Как видно из названия, это необязательный аргумент.Если вы не используете аргумент, вы передаете boost::none вместо этого.(не NULL; это нулевая константа указателя, и мы здесь не используем указатели).

0 голосов
/ 13 сентября 2011

Если вам нужно значение, представляющее особый случай, вы можете создать статическую переменную и проверить ее.

static std::vector<double> null_fill;

void RegMatrix::MatrixInit(int numRow,int numCol, const std::vector<double> & fill = null_fill)
{
    if (&fill == &null_fill)
        // do something special
    else
        // do something;
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...