Добрый день.
Возникла задача, написать 4 функции которые будут различаться лишь подаваемыми типами и одной строкой в теле. При этом хотелось бы сделать это как можно более лаконично и изящно.
Мне показалось, что будет здорово написать шаблон и в качестве параметра передавать функцию, которая будет определять нужную строку. Примерно это у меня в голове должно выглядеть так:
template<class inType, class outType>
void defOp(const <inType>& IN1,const <inType>& IN2,<outType>& res, <FUNCTION>)
{
res = FUNCTION(iF,sF)
};
Хотелось бы понять как нужно подать в шаблон эту FUNCTION. Причем вызывать функцию хотелось бы, например, так:
defOp(IN1,IN2,res,add);
defOp(IN1,IN2,res,mult);
И как следует описывать add и mult?
template<class inType, class outType, typename Function>
void defOp(const inType& IN1, const inType& IN2, outType& res, Function func)
{
res = func(iF,sF);
};
Если вы хотите получить иметь возможность передавать в свою функцию любые "вызываемые" (callable) объекты, то либо
template<typename inType, typename outType, typename F>
void defOp(const inType &in1, const inType &in2, outType& res, F f)
{
res = f(in1, in2);
}
либо
template<typename inType, typename outType>
void defOp(const inType &in1, const inType &in2, outType& res,
std::function<outType (inType, inType)> f)
{
res = f(in1, in2);
}
Во втором случае вы немножко жертвуете производительностью для того, чтобы избавиться от одного шаблонного параметра.
Если же общий тип передаваемой функции вам заранее известен и фиксирован, то его можно впрямую указать в качестве типа параметра. Например, если вы знаете, что передавать будете только обычные функции, то
template<typename inType, typename outType>
void defOp(const inType &in1, const inType &in2, outType& res,
outType f(inType, inType))
{
res = f(in1, in2);
}
хотя никакой экономии над предыдущими вариантами такая конкретика не дает.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Вот фрагмент кода игрыНужно чтобы пушка могла одновременно двигаться и стрелять но когда двигаю пушку например налево пушка останавливается...
Пытаюсь правильно составить слау, чтобы решить ГауссомПолучился примерно такой код: