检查类型的变量参数

时间:2016-10-14 15:01:06

标签: c++

我在下面有一个用于字符串连接的函数,它接受一组可变长度的参数。我想检查以确保每个元素都是 一个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);
}

2 个答案:

答案 0 :(得分:5)

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

您必须信任调用者才能正确使用:在C中,使用(char*)表示法,在C ++中使用reinterpret_cast

C ++ 11的可变参数模板将类型安全性引入变量参数列表。

答案 1 :(得分:0)

  

“不能用于char *”

不要使用char *,使用可以与动态转换一起使用的对象,比如std :: string或你自己的类。