Как применить сложную функцию к аргументу шаблона одного шаблона функции, чтобы ее можно было использовать в качестве аргумента шаблона в другом шаблоне функции?Я новичок в шаблонах, поэтому, пожалуйста, потерпите меня.
В приведенном ниже коде я вызываю foo<1,2>()
, это генерирует функцию, а внутри тела этой функции она вызывает сгенерированную bar<2>()
функцию.Проблема для меня в том, что у меня есть сложная функция, которая, насколько я знаю, не может быть оценена с помощью стандартных арифметических операторов.
Я могу использовать c ++ 11, если это поможет.
#include <iostream>
template<size_t c>
unsigned int bar(){
return c;
}
template<size_t a, size_t b>
unsigned int foo(){
return bar<a*b>();
//return bar<COMPLICATEDFUNCTION(a,b)>(); // what I actually want to do
}
int main(void) {
std::cout << foo<1,2>();
return 0;
}
Если это поможет, моя конкретная функция: f (r, c) = r * c - c - (cвыберите 2), который подсчитывает количество элементов с меньшей диагональю неквадратной матрицы (r> c).Функция, которую я написал для вычисления этого, может быть объявлена inline
, но, насколько я понимаю, компилятор не обещает этого.В предыдущем вопросе я спрашивал об использовании макрофункций, и это было встречено со скептицизмом.Кроме того, в том же потоке были предложены функции constexpr.