[英]Mapping template arguments of one function template to template arguments of another (c++)
如何将复杂的函数应用于一个函数模板的模板参数,以便可以将其用作另一函数模板的模板参数? 我是模板的新手,所以请多多包涵。
在下面的代码中,我调用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函数。
当然, constexpr
是您的救星。 使用以下定义:
constexpr size_t fact(size_t x) {
return (x == 0 || x == 1) ? 1 : x * fact(x - 1);
}
constexpr size_t choose(size_t n, size_t k) {
return fact(n) / (fact(k) * fact(n - k));
}
constexpr size_t complexfunc(size_t r, size_t c) {
return r * c - c - choose(c, 2);
}
调用bar<complexfunc(a,b)>();
假设C ++ 11应该可以正常工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.