I like vectors, and generally use them over arrays. For that reason I created a templated variadic function to initialize vectors (included below).
Header (.h):
template <typename T>
vector<T> initVector(const int argCount, T first, ...);
Source (.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;
}
It works great for most types (e.g. int, double...), but not for strings---as the compiler interprets them as 'const char *', thus
vector<string> strvec = initVector(2, "string one", "string two");
gives me the error:
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
Is there any way to get the string arguments to be interpreted as strings without having to cast each one?
initVector<std::string>(2,"string 1","string 2")for example.Tto 2 different types at the point where the function is called.stringbefore the arguments are passed to the function. If rawconst char*s are passed (as in my suggested solution), we're still good.