Присвоение параметров со значениями по умолчанию для функции - PullRequest
4 голосов
/ 10 августа 2010

У меня есть функция порождения потока, которая принимает много параметров, которые имеют значения по умолчанию в объявлении.

int spawn (funcptr func, void arg = 0, int grp_id = 1, const char имя потока);

Я хочу инициализировать первый параметр func, а последнему параметру имя потока и оставшимся переменным присвоены значения по умолчанию.

spawn (myfunc, "My Thread");

Как я могу это сделать.

Ответы [ 4 ]

6 голосов
/ 10 августа 2010

Вы не можете.

Другие языки поддерживают такие вещи, как spawn(myfunc, , , "MyThread"), но не C ++.

Вместо этого просто перегрузите его на свой вкус:

inline int spawn( funcptr func, const char*threadname) {
    return spawn(func, 0, 1, threadname);
}
1 голос
/ 10 августа 2010

С здесь ,

Параметры с аргументами по умолчанию должны быть конечными параметрами в списке параметров объявления функции.

Например:

void f(int a, int b = 2, int c = 3);  // trailing defaults
void g(int a = 1, int b = 2, int c);  // error, leading defaults
void h(int a, int b = 3, int c);      // error, default in middle

Так что, если вы являетесь тем, кто объявляет и определяет вашу spawn() функцию, у вас могут быть значения по умолчанию в конце .. И наоборот не возможно ..

1 голос
/ 10 августа 2010

Другие ответы технически правильны, но возможно сделать , используя библиотеку Boost.Parameter .Это требует некоторой настройки, хотя может и не стоить того.

0 голосов
/ 10 августа 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...