У меня есть шаблонный код C ++ - 03, который включает фрагмент, который я хотел бы написать примерно так:
template <typeName optType>
std::string
example(optType &origVal)
{
return bool(origVal) ? "enabled" : "disabled";
}
Однако для struct linger
не определено optType::operator bool()
, и я не могу добавить его, поскольку этот struct
не мой. Поэтому сейчас я написал это так:
template <typename optType>
bool
castBool(const optType &value)
{
return bool(value);
}
template <>
bool
castBool<struct linger>(const struct linger &value)
{
return bool(value.l_onoff);
}
template <typeName optType>
std::string
example(optType &origVal)
{
return castBool(origVal) ? "enabled" : "disabled";
}
Но мне интересно, есть ли более лаконичный способ сделать это? Например, я могу определить статический operator==()
вне класса, например так:
bool
operator==(const struct linger &lhs, const struct linger &rhs)
{
return lhs.l_onoff == rhs.l_onoff && lhs.l_linger == rhs.l_linger;
}
Так что, возможно, есть какой-то синтаксис, чтобы сообщить компилятору, как преобразовать структуру, такую как struct linger
здесь, в bool?
operator bool()
может быть реализован только как участник, а не как самостоятельный. Ваша существующая специализация шаблона - это решение. - person Remy Lebeau   schedule 12.07.2015