#cpp #шаблоны_с++ #cpp17
Можно ли сделать так, чтобы тип CharT выводился автоматически в C++17? templatevoid test(std::basic_string_view string) { } test ("hello world"); //ok test("hello world"); //compile error
Ответы
Ответ 1
Можно добавить перегрузку: templatevoid test(CharT const ( & string )[x_array_size]) { return test(std::basic_string_view {string}); } Ответ 2
Сразу создавать basic_string_view через пользовательский литерал using namespace std::string_view_literals; test("hello world"sv);Ответ 3
Присвойте тип по умолчанию: templatevoid test(std::basic_string_view string) Тогда если вы явно не укажете тип для шаблонной функции, будет использован char по умолчанию Ответ 4
Извините, но мне не совсем понятно, зачем Вам это нужно. Вам не нужен никакой вывод типов для того случая, который Вы описали: test("hello world"); //ok test("hello world"); //compile error Функция, которая в качестве параметра принимает std::string_view прекрасно справится и с std::string, и с C-string: void print_str_view(std::string_view str_view) { std::cout << str_view << std::endl; } const char* str0 = "C-string"; std::string str1 = "std::string"; print_str_view("string"); print_str_view(str0); print_str_view(str1); А вот если Вы передадите в качестве аргумента std::wstring - код не скомпилируется. Эту проблему решит перегрузка вышеуказонной ф-ии функцией: void print_str_view(std::wstring_view str_view) { std::wcout << str_view << std::endl; } Пример: std::wstring str2 = L"légo"; print_str_view(str2);
Комментариев нет:
Отправить комментарий