检查变量参数的类型

Checking variable arguments for type

本文关键字:类型 参数 变量 检查      更新时间:2023-10-16

我有下面一个用于字符串连接的函数,它接受一组可变长度的参数。我要检查确保每个元素都是一个char *。我正在寻找使用dymanic_cast,但它不能用于char*。我应该如何进行实参的类型转换?:

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);
}

你根本不知道。没有明确定义的方法来知道变量参数列表的参数类型是什么。

你必须相信调用者是正确的:在C中,使用(char*)符号,在c++中使用reinterpret_cast

c++ 11的可变模板在变量参数列表中引入了类型安全。

"不能用于char*"

不要使用char*,使用一个可以用于动态强制转换的对象,比如std::string或者你自己的类