我想在C++ 03中实现以下功能:
template <typename T1, typename T2>
T1 convert(bool condition, T2& value)
{
return condition ? value : conversionFunction(value);
}
除了我想调用
convert
,而不必显式指定T1
。我怎么做? 最佳答案
也许您可以使用hack。技巧是将转换推迟到您实际使用返回值之前。返回值是一个帮助程序对象,它可以将其自身转换为其他对象。
template <typename T>
struct ConvertHack {
T &value_;
const bool cond_;
ConvertHack (bool cond, T &value) : value_(value), cond_(cond) {}
template <typename U> operator U () const {
return cond_ ? value_ : conversionFunction(value_);
}
};
template <typename T>
ConvertHack<T> convert(bool condition, T& value) {
return ConvertHack<T>(condition, value);
}