繁体   English   中英

将一个功能模板的模板参数映射到另一个功能模板的模板参数(C ++)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM