我想实现如下的模板功能。 ret 是在doSomething()之后设置的返回值。但是doSomething有时会返回false,所以我想将默认值设置为 ret 。如果 T 为int,则 ret 应为0,如果 T 为字符串,则 ret 应为空字符串。那么在这种情况下,我应该如何将默认值设置为 T ?
T getSomeData() {
T ret;
if(doSomething()) {
ret = XXX(); // XXX is set correctly because I use other library..
} else {
ret = ??
}
return ret;
}
答案 0 :(得分:2)
template<class T>
T getSomeData() {
T ret = T();
if(doSomething()) {
ret = XXX();
}
return ret;
}
答案 1 :(得分:2)
缺乏其他理由,我倾向于写一些更像是:
template <class T>
T getSomeData() {
return doSomething() ? XXX() : T();
}
如果您愿意,可以改为使用if
语句:
template <class T>
T getSomeData() {
if (doSomething())
return XXX();
return T();
}
但是,我并不认为定义局部变量只是为了保留返回值。
答案 2 :(得分:0)
您可以使用构造函数。
template<typename T>
T getSomeData() {
T ret = T();
}