Как написать шаблонную функцию для создания строк char / wchar_t с заданным значением const char *? - PullRequest
0 голосов
/ 17 мая 2018

Я хотел бы написать функцию для создания строк char / wchar_t, заданных const char* ( 'small' строковые литералы).

Например, что-то вроде

template<typename T>
std::basic_string<T> test(const char* str) {
    ///
}

Так что я могу использовать

std::string a = test<char>("haha");

или

std::wstring b = test<wchar_t>("哈哈"); // NOT L"哈哈"

для создания строк на основе аргументов шаблона.

Я знал, что было бы легко, если бы аргумент функции был const T* str. Но я не могу понять, когда это const char* str. И я думаю, что какое-то преобразование должно быть выполнено.

Заранее спасибо.

1 Ответ

0 голосов
/ 17 мая 2018

Это не так сложно, вы просто должны написать явные специализации для вашей функции шаблона.Основным недостатком здесь является то, что вам придется всегда передавать аргумент типа, потому что здесь не может происходить вывод шаблона: обе специализации имеют абсолютно одинаковые параметры: один const char * параметр.

При этом вы можете написать:

template<typename T>
std::basic_string<T> test(const char* str) {
    ///
}

template <>
std::basic_string<char> test<char>(const char *str) {
    // generate a std::string
}

template <>
std::basic_string<wchar_t> test<wchar_t>(const char *str) {
    // generate a std::wstring
}

Но вам придется использовать их таким образом:

std::string str = test<char>("haha");
std::wstring wstr = test<wchar_t>("哈哈");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...