C++ C+中的模板函数返回类型推导+;03
我想在C++03中实现以下功能:C++ C+中的模板函数返回类型推导+;03,c++,templates,template-argument-deduction,return-type-deduction,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); } 模板 T1转换(布尔条件、T2和值) { 返回条件?值:转换函数(值); } 除非我想调用convert,而不必显式指定T1。我该怎么做 编译器不推断返回类型(这与返回类
template <typename T1, typename T2>
T1 convert(bool condition, T2& value)
{
return condition ? value : conversionFunction(value);
}
模板
T1转换(布尔条件、T2和值)
{
返回条件?值:转换函数(值);
}
除非我想调用
convert
,而不必显式指定T1
。我该怎么做 编译器不推断返回类型(这与返回类型不支持重载一致)。必须明确指定此模板参数,例如,通过调用
convert<Obj>(x);
替换/*条件*/
,可能会有所帮助
用于转换器的语法称为分部。
有关指定
convert
的返回值时为什么需要typename
的信息,请参见。也许您可以使用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);
}
模板
结构转换黑客{
T&value;
康斯特布尔康德;
ConvertHack(boolcond,T&value):value(value),cond(cond){
模板运算符U()常量{
返回条件值:转换函数(值);
}
};
模板
ConvertHack转换(布尔条件、T和值){
返回ConvertHack(条件、值);
}
如果条件成立,则返回值,该值必须可转换为T1,对吗?不,不需要转换。转换模板的第二个参数既没有默认值,也没有指定值?我们希望调用转换(x)能被上面的模板拾取?。。。对我不确定你的意思。@armundle真的修复了。为什么要在Obj
上使用模板?对不起,我误读了你以前的答案。只需替换所需的返回类型(无论您想要什么T1
)。
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);
}