Могу ли я получить доступ к типу переменной для общего программирования?
Если у меня есть такой код:
std::wstring s(L"...");
bool allCharsEqual =
std::find_if(s.begin(),
s.end(),
std::bind1st(std::not_equal_to<std::wstring::value_type>(),
mystring[0])) // ^^^^^^^^^^^^^^^^^^^^^^^^
== s.end();
Я хотел бы иметь общее выражение в отмеченном месте, которое также будет работать, если я изменил тип переменной на std::string
, Это возможно?
Я понимаю, что мог бы поместить это в дополнительную функцию и шаблонировать ее с типом строки, но есть ли другой способ?
2 ответа
Ты можешь использовать decltype
в C++11:
std::not_equal_to<decltype(s)::value_type>()
Или в C++14 вы можете использовать прозрачные компараторы и просто полностью пропустить аргумент шаблона:
std::not_equal_to<>()
Если вы застряли с C++03, вы можете сделать typedef
так что у вас есть только одно место, которое вам нужно обновить, чтобы изменить типы. Это хорошая практика в целом, если вы не можете использовать auto
и есть типы, которые вы ожидаете изменить.
typedef std::wstring str_t
Я думаю, что decltype это то, что вы ищете.
Поскольку decltype доступен только в C++11, возможно, создание вашего кода в качестве шаблона поможет, если вам придется писать код до 11
template <typename STRING_TYPE>
bool allCharsEqual(STRING_TYPE s){
/* ... */
}