У меня есть шаблонная функция, которую я хочу специализировать foo
до const char[N]
(жестко закодированные строки)
template<typename T>
const std::string foo() ;
template<typename T,int N>
const std::string foo<T[N]>() { return "T[N]"; } //this doesn't work for const char[12]
template<>
const std::string foo<const char*>() { return "Const char"; } //this doesn't work for const char[12]
template<typename T>
void someother function(T obj)
{
string s = foo<T>(); //I want to overload when T is const chat[N]
}
function("Hello World"); //When calling like this the type is const char[12]
Я думал, что могу сделать что-то, как было сделано Здесь .
Но это не так хорошо работает, потому что я не передаю параметр, просто шаблонный тип.
Я мог бы сделать это так, но просто нет причин передавать параметр этой функции.
Пример не работает, потому что я не передаю переменную. Пробовал несколько вещей, но не могу заставить его работать.
Это единственная специализация, которую я не могу решить. Я специализировал функцию для типов int, string и других типов, и они работают нормально.
error LNK2001: unresolved external symbol "class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const __cdecl foo<char const [12]>(void)"
Первое шаблонное объявление не имеет никакого предназначения ... Я пытаюсь получить правильную специализацию, которая будет использоваться для моего случая.