我喜欢向量,并且通常使用它们而不是数组。因此,我创建了一个模板化的可变参数函数来初始化向量(包含如下)。
头文件(.h):
template <typename T>
vector<T> initVector(const int argCount, T first, ...);
源文件(.hpp):
template <typename T>
vector<T> initVector(const int argCount, T first, ...) {
vector<T> retVec;
retVec.resize(argCount);
if(argCount < 1) { ... }
retVec[0] = first;
va_list valist;
va_start(valist, first);
for(int i = 0; i < argCount-1; i++) { retVec[i+1] = va_arg(valist, T); }
va_end(valist);
return retVec;
}
它可以很好地处理大多数类型(例如int,double...),但不适用于字符串----因为编译器将它们解释为'const char *'。
vector<string> strvec = initVector(2, "string one", "string two");
出现错误:
error: conversion from ‘std::vector<const char*, std::allocator<const char*> >’ to non-scalar type ‘std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >’ requested
有没有办法让字符串参数被解释为字符串而不必每个都进行转换?
initVector<std::string>(2,"string 1","string 2")
。 - tmpearce