2015-08-06 3 views
1

Я хочу реализовать функцию шаблона, как показано ниже. ret - это возвращаемое значение, которое устанавливается после doSomething(). Но в doSomething иногда возвращает false, поэтому я хочу установить значение по умолчанию ret. Если T является INT, RET должен быть 0, и если T является строка, RET должна быть пустая строка. Итак, в этом случае, как мне установить значение по умолчанию T?Как установить значение по умолчанию в функции шаблона в C++?

T getSomeData() { 
    T ret; 
    if(doSomething()) { 
    ret = XXX(); // XXX is set correctly because I use other library.. 
    } else { 
    ret = ?? 
    } 
    return ret; 
} 

ответ

2
template<class T> 
T getSomeData() { 
    T ret = T(); 
    if(doSomething()) { 
    ret = XXX(); 
    } 
    return ret; 
} 
+0

GREAT! Спасибо. Но я должен обратить внимание на тип T, если он является обычным классом. – jef

0

Вы можете использовать конструктор.

template<typename T> 
T getSomeData() { 
    T ret = T(); 
} 
+1

Это работает даже для типов 'T' без конструкторов. – juanchopanza

2

Не имея оснований поступить иначе, я, как правило, чтобы написать что-то подобное:

template <class T> 
T getSomeData() { 
    return doSomething() ? XXX() : T(); 
} 

Если вы предпочитаете, вы можете использовать if заявление вместо:

template <class T> 
T getSomeData() { 
    if (doSomething()) 
     return XXX(); 
    return T(); 
} 

Однако я не вижу никакого преимущества для определения локальной переменной, чтобы хотя бы удерживать возвращаемое значение.

Смежные вопросы