Можно ли определить значение по умолчанию для переменных функции шаблона в С++?
Что-то вроде ниже:
template<class T> T sum(T a, T b, T c=????)
{
return a + b + c;
}
Можно ли определить значение по умолчанию для переменных функции шаблона в С++?
Что-то вроде ниже:
template<class T> T sum(T a, T b, T c=????)
{
return a + b + c;
}
Попробуй это:
template<class T> T sum(T a, T b, T c=T())
{
return a + b + c;
}
Вы также можете указать T(5), если вы ожидаете целочисленный тип и хотите, чтобы значение по умолчанию было равно 5.
Все зависит от предположений, которые вы можете сделать о типе.
template <typename T> T sum( T a, T b, T c = T() ) { return a+b+c; }
template <typename T> T sum2( T a, T b, T c = T(5) ) { return a+b+c; }
В первом случае предполагается, что T
является конструируемым по умолчанию. Для типов POD это инициализация значения (IIRC) и в основном 0
, поэтому sum( 5, 7 )
вызовет sum( 5, 7, 0 )
.
Во втором случае требуется, чтобы тип мог быть построен из целого числа. Для целочисленных типов sum( 5, 7 )
вызовет sum( 5, 7, int(5) )
, что эквивалентно sum( 5, 7, 5 )
.
T
, и это будет нормально, пока вы передаете явный аргумент.
- person Johannes Schaub - litb; 21.07.2010
Да, вы можете определить значение по умолчанию.
template <class T>
T constructThird()
{
return T(1);
}
template <class T>
T test(T a,
T b,
T c = constructThird<T>())
{
return a + b + c;
}
К сожалению, функция convertThird не может принимать a и b в качестве аргументов.
Да, просто должен быть конструктор для T
из любого значения, которое вы туда поместите. Учитывая код, который вы показываете, я предполагаю, что вы, вероятно, захотите, чтобы этот аргумент был 0
. Если вам нужно более одного аргумента для конструктора, вы можете указать T(arg1, arg2, arg3)
в качестве значения по умолчанию.
Да!
Однако вы должны хотя бы иметь представление о том, что может быть T, иначе это бесполезно.
Вы не можете установить значение параметров шаблона по умолчанию для функций, т.е. это запрещено:
template<typename T=int> void f(T a, T b);