私はベクトルが好きで、通常は配列よりもベクトルを使用します。そのため、ベクトルを初期化するためのテンプレート化された可変個引数関数を作成しました (以下に含まれています)。
ヘッダー (.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
それぞれをキャストすることなく、文字列引数を文字列として解釈する方法はありますか?