Хотя есть способ, чтобы сделать эту работу, используя шаблоны и передачи C-массивов по ссылке, я не уверен, если это то, что вы действительно хотите: example
В C++ 11 Я бы много предпочитают использовать std::intializer_list
, чтобы сделать вызов foo("c", {"a", "b", "c"})
работу по назначению:
#include <initializer_list>
bool foo(const char* arg, std::initializer_list<const char*> strings) {
for (const char* str : strings) {
/* ... */
}
}
в то время как мы в этом, вы должны рассмотреть возможность использования строковых объектов C++ 's более унаследованных от C:
#include <initializer_list>
#include <string>
bool foo(const std::string& arg, std::initializer_list<std::string> strings) {
for (const auto& str : strings) {
if (arg == str) {
return true;
}
}
return false;
}
Обратите внимание, что std::initializer_list
не принадлежит значениям, которым он обеспечивает доступ, поэтому, если вы хотите его сохранить, вместо этого используйте соответствующий контейнер, например std::vector
.
Кроме того, если проверка на наличие arg
в str
все, что вы хотите сделать, почему бы не использовать std::find
?
#include <algorithm>
#include <initializer_list>
#include <string>
bool foo(const std::string& arg, std::initializer_list<std::string> strings) {
return std::find(strings.begin(), strings.end(), arg) != strings.end();
}
You shou ld вызывает функцию foo() следующим образом: 'foo (" c ", [" a "," b "," c "])' –
@VuongHoang вы пробовали это? это не python – melak47