Допустим, у меня есть такой класс
template<typename CharT>
class basic_class
{
public:
using char_type = CharT;
using string_type = std::basic_string<CharT>;
private:
const char_type ch = '?';
const string_type str{"How to init"};
};
Это нормально, если это char, но не для wchar_t.
- Как я могу это сделать?
EDIT:
Я решил написать функцию, которая преобразует форму char и строку в различные типы, например
template<typename To>
constexpr To to_type(char val)
{}
template<>
constexpr char to_type<char>(char val)
{
return val;
}
template<>
constexpr wchar_t to_type<wchar_t>(char val)
{
//....
}
template<>
constexpr char16_t to_type<char16_t>(char val)
{
//....
}
template<>
constexpr char32_t to_type<char32_t>(char val)
{
//....
}
и
template<typename To>
constexpr To to_type(std::string val)
{}
template<>
constexpr std::string to_type<std::string>(std::string val)
{
return val;
}
template<>
constexpr std::wstring to_type<std::wstring>(std::string val)
{
//....
}
template<>
constexpr std::u16string to_type<std::u16string>(std::string val)
{
//....
}
template<>
constexpr std::u32string to_type<std::u32string>(std::string val)
{
//....
}
Тогда я буду использовать это как
template<typename CharT>
class basic_class
{
public:
using char_type = CharT;
using string_type = std::basic_string<CharT>;
private:
const char_type ch = to_type<char_type>( '?' );
const string_type str{ to_type<string_type>( "How to init" ) };
};
В операторах if, например
if ( ch == to_type<char_type>('?') )
{
//....
}
if ( str == to_type<string_type>("How to init") )
{
//....
}
Как преобразовать другие типы char и std :: string?
Все предложения приветствуются, заранее спасибо.