我喜欢向量,通常在数组上使用它们。出于这个原因,我创建了一个模板化的可变参数函数来初始化向量(包括在下面)。
标题(.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
有没有办法让字符串参数被解释为字符串,而不必强制转换每个参数?