我在下面有一个用于字符串连接的函数,它接受一组可变长度的参数。我想检查以确保每个元素都是 一个char *。我正在研究使用dymanic_cast但它不能用于char *。 我应该如何施展arg?:
char* Concatenate(int numStrings, ...)
{
vector<char*> stringVectorArray;
va_list vargList;
if (numStrings > 0 && numStrings < MAX_STRING_BUFFER_SIZE)
{
//Store each of the arguments so we can iterate through them later.
va_start(vargList, numStrings);
for (int currIndex = 0; currIndex < numStrings; currIndex++)
{
char* item = (char*)(va_arg(vargList, char*));
if (item == NULL)
{
//Error: One of the parameters is not char*.
va_end(vargList);
return NULL;
}
else
{
stringVectorArray.push_back(item);
}
}
va_end(vargList);
}
return ConcatenateStrings(stringVectorArray);
}
答案 0 :(得分:5)
你根本就不知道。没有明确定义的方法来了解变量参数列表的参数类型。
您必须信任调用者才能正确使用:在C中,使用(char*)
表示法,在C ++中使用reinterpret_cast
。
C ++ 11的可变参数模板将类型安全性引入变量参数列表。
答案 1 :(得分:0)
“不能用于char *”
不要使用char *,使用可以与动态转换一起使用的对象,比如std :: string或你自己的类。