Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Вот меня и вымораживает то, что вместо адекватных языковых средств управления приоритетами и доступностью шаблонных функций, идеологами C++ предлагаются извращения через метапрограммирование. По сути, это костыли, и выглядят уродливо, хотя и работают как-то. Очень трудно заставить себя это использовать. Спасибо за идею — буду пробовать, если не запинаю более традиционными способами.
Да ты просто не хочешь пользоваться тем, что предлагают в С++
Вот смотри, эта твоя MulAddDiv
Пишешь ШАБЛОН
template<typename T> T MulAddDiv( T a, T b, T c, T d)
{
return (a * b + c) / d;
}
И пишешь ДРУГОЙ шаблон
template<typename TRes> TRes MulAddDiv( int a, int b, int c, int d)
{
return static_cast<TRes>( тут вычисляем с использованием особенностей x86 )
}
Ну и потом тип результата определяется всё равно тем, что должно получиться, так что всё равно при вызове надо звать MulAddDiv<int> или MulAddDiv<long long> или ещё как там вам надо
Ну и так для всех исключений из общего варианта.
Если надо подавить автоматический вывод T в первом варианте, можно сделать промежуточный шаблон Ideal<T>::Type, например
Но ты же не хочешь так делать? Хотя я не понимаю почему.
p. s.
Ну и перед тем, как что-то делать, я бы ещё глянул а не делает ли всё см оптимизатор. Может достаточно просто верно типы параметров и результата задавть?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском