我想在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);
}

10-08 07:55
查看更多