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

Make the compiler deduce the parameter of a function before compilation

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

#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);
}

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

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

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

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

int main() {
    func1<4>();
    ...
}

请注意,如果 length 是一个 compile-time 常量(如此处所示),则您的可变长度数组 (VLA) 是合法的 C++。不过,std::array 会是更好的选择。

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