让编译器在编译前推导函数的参数

bak*_*oda 3 c++ templates function fpga

这是我的问题的一个例子。

#include <stdio.h>

//template<std::size_t A> <-- Tried to solve the problem by using template
void func1(const int power){
    const int length = 1 << power;
    int twoDArrayA[length][length];

    for (int j = 0; j < power; j++)
    {
        /* Code */
    }
}

int main() {
    func1(4);
    func1(3);
    func1(2);
}
Run Code Online (Sandbox Code Playgroud)

我想知道是否可以以某种方式允许编译器在编译之前推断出 func1 中的参数幂。因此,它不是编译一个函数,而是以 func1 的格式编译 4 个具有不同值的函数。

这样做的原因是因为我想使用 Vitis HLS 展开循环并对矩阵进行分区,以便可以在 FPGA 上实现,而可变长度循环或数组无法正常工作。

Pau*_*ers 7

您可以使用模板来完成此操作,但语法错误。它应该是:

template<std::size_t power>
void func1(){
    const std::size_t length = 1 << power;
    int twoDArrayA[length][length];
    ...
}

int main() {
    func1<4>();
    ...
}
Run Code Online (Sandbox Code Playgroud)

length请注意,如果您的可变长度数组 (VLA)是编译时常量(如此处所示),则它是合法的 C++ 。尽管如此,std::array这将是一个更好的选择。

PS:感谢您告诉我们您为什么要这样做。这是一个很好的接触。