c++ - C++03 中的模板函数返回类型推导

标签 c++ templates template-argument-deduction return-type-deduction

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

关于c++ - C++03 中的模板函数返回类型推导,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30538350/

相关文章:

c++ - 为什么正在运行的程序的性能会随着时间的推移而变得更好?

c++ - 如何在模板中调用类型的析构函数?

c++ - 模板名和类模板名的区别

c++ - 带有 const 限定符的类型推导失败

c++ - 如何进行跨度类推导以正确执行右值数组的 CTAD?

c++ - 写入文件权限被拒绝

c++ - fstream 系列的实现是否因平台而异?

c++ - 多参数模板不能很好地处理友元声明

javascript - 在 HTML 中使用脚本模板是一种不好的做法吗?

c++ - "decay"模板别名