Это зависит от вашего варианта использования.
Много раз вы можете с легкостью написать конструктор для
T(int i) {
//construct T from int
};
и не пометить его как явный. Теперь вы можете выполнять T + 2, 15 + T и T + T, просто определяя
T operator+(T a, T b)
, поскольку неявное преобразование пойдет на конвертацию вашего int
в T
. Если вам нужно много различных арифметических c типов, вы можете много раз избежать создания одного шаблона.
template <typename U, std::enable_if_t<std::is_arithmetic_v<U>, int> = 0>
T(U u) {
//construct T from arithmetic type
};
Теперь тот же operator+
позаботится обо всех встроенных числах.
Другим вариантом может быть предоставление T
оператора преобразования для int
, но, поскольку вы спрашиваете о operator+
, который возвращает T
, я пропущу этот пример. Принцип тот же, но вы получите int
с после добавления.
Если ваш T
очень сложный, иногда вам просто нужно дать ему много различных перегрузок операторов.