2016-11-24 2 views
1

Извините за вопрос noob. Я был погружен в Java в прошлое, а книга для этого курса не охватывает C++.... оператор в функции

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

void addKeywordsForItem(const Item* const item, int nKeywords, ...); 

В Java ... возвращает остаток аргументов как String объекта и я предполагаю, что C++ делает что-то подобное, но я не знаю название ... поэтому поиск для него довольно сложно.

Что такое ... и что он делает?

+1

это ... [VARIADIC аргументы] (http://en.cppreference.com/w/cpp/language/variadic_arguments), 'улов (...) 'означает catch all handler, а также означает вариационный шаблон и его расширение. – Danh

+1

У вас есть два несвязанных вопроса. Выберите его. Вы можете отправить свой другой вопрос отдельно. – hvd

+1

Хорошо, для '...', у вас есть правильный ответ, но теперь, когда вы знаете, что искать, не забудьте также узнать, почему вы вообще не должны использовать вариационные функции в современном C++, в особенно отсутствие безопасности типов. Если вы хотите получить набор строк, в базовом типе-безопасном подходе используется 'void addKeywordsForItem (const Item * const item, std :: initializer_list keywords)' (называться 'addKeywordsForItem (item, {" a ", «b», «c»))), но возможны и более продвинутые подходы, которые позволяют больше вариаций в том, как вы вызываете эту функцию. – hvd

ответ

2

Что называется ... и что он делает?

Существует несколько мест, где ... используется в C++. Контекст, в котором вы его используете, называется variadic arguments.

В стандартном заголовке cstdarg представлен тип и макросы, которые помогут вам извлечь конкретные аргументы из вариационных аргументов.

Пример кода из http://en.cppreference.com/w/cpp/utility/variadic/va_start:

#include <iostream> 
#include <cstdarg> 

int add_nums(int count, ...) 
{ 
    int result = 0; 
    va_list args; 
    va_start(args, count); 
    for (int i = 0; i < count; ++i) { 
     result += va_arg(args, int); 
    } 
    va_end(args); 
    return result; 
} 

int main() 
{ 
    std::cout << add_nums(4, 25, 25, 50, 50) << '\n'; 
} 
+0

Ничего себе, я хочу, чтобы учитель сделал это. Может быть, добавьте здесь пример кода в свой ответ для кого-то, кто смотрит на это? http://en.cppreference.com/w/cpp/utility/variadic/va_start –

Смежные вопросы