Я пошел для шаблона подхода потому что это казалось самым элегантным/кратким, но я в конечном итоге такие вещи, как это:
template<typename charType>
int doSomethingWithString(const charType* buffer)
{
wchar_t* tempBuffer = NULL;
if(typeid(charType) == typeid(char))
{
tempBuffer = (wchar_t*)malloc(sizeof(wchar_t)*strlen((char*)buffer));
mbstowcs(tempBuffer, (const char*)buffer, strlen((const char*)buffer));
}
else if(typeid(charType) == typeid(wchar_t))
{ tempBuffer = (wchar_t*)malloc(sizeof(wchar_t)*strlen((char*)buffer));
tempBuffer = wcscpy(tempBuffer, (const wchar_t*)buffer);
}
В этот момент я чувствую, что это своего рода уродливый (особенно потому, что мне все еще нужно иметь все эти ролики, чтобы компилятор знал). Я также попытался превратить параметр в wstring, но я просто не нашел подходящего конструктора для обоих случаев?
Это было время, теперь, когда я был вдали от C++, и я не могу вспомнить ++ пути C идти об этом:
Скажет, у меня есть класс с некоторыми методами MyClass :: doSomethingWithString (. ..), и я хочу, чтобы тот же метод мог быть вызван передачей в символьной последовательности как const char * или const wchar_t *. Был ли способ заставить метод иметь возможность принимать оба типа «строк» и указать, является ли параметр const char * или const wchar_t * внутри реализации метода? Или метод перегружает единственный способ сделать это?
Ugh! Здесь не так много C++. –