如何在不使用vector的情况下在C ++中传递多个字符串参数并将其作为参数传递?
我想做这样的事情。
void MyClass::go()
{
check("string1","string2","string3");
}
//guessing
void check(string values,...)
{
//how I can output each value here?
}
EDITED: 感谢您的回答,但我的目标是传递大小不均匀的字符串参数。这意味着我不需要为它的大小输入一些int。我不想使用矢量:)
答案 0 :(得分:1)
在我看来,最好的解决方案是实际使用矢量。这样你就具有类型安全性,你可以传入任意数量的字符串。
您也可以使用可变参数模板。
如果您确切知道要传入多少个字符串,则可以拥有该字符串的参数列表。这是相当繁琐的,如果你改变主意,你需要重写你的功能(以及使用它的每个代码)。
var args的问题在于它不是类型安全的,编译器无法验证你想要将一串字符串传递给你的函数。
答案 1 :(得分:0)
void check (const string &string1, const string &string2, const string &string3)
{
cout << string1 << " " << string2 << " " << string3 << endl ;
}
答案 2 :(得分:0)
在c&amp; c ++,这可以通过一个叫做变量参数的东西来实现。请注意,对于varargs,在调用函数时,您需要提供至少一个参数,即参数的字符串数。 变量参数有助于传递多个参数,而无需实际知道要传递的参数数量。
为此,您可以包含stdarg.h。这为您提供了数据类型:va_list和相关函数:
#include <cstdarg>
#include <iostream>
using namespace std;
void check ( int num, ... )
{
va_list arguments; //a place to store the arguments values
va_start ( arguments, num ); // Initializing arguments to store all values after num
for ( int x = 0; x < num; x++ ) { // Loop until all numbers are added
cout << va_arg ( arguments, string ); // Prints the next value in argument list to sum.
}
va_end ( arguments ); // Cleans up the list
}
void MyClass::go()
{
check(3,"string1","string2","string3");
}
num是您提供的参数数量。
va_start使用您提供的参数(在本例中为字符串)填充va_list。
va_arg()用于访问列表中的那些参数。
最后,va_end()用于清理va_list。
答案 3 :(得分:0)
您可以在C ++ 11中使用va_list或可变参数模板。这取决于你的背景。