让编译器在编译前推导函数的参数
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:感谢您告诉我们为什么您想这样做。这是一个很好的接触。
这是我的问题的一个例子。
#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:感谢您告诉我们为什么您想这样做。这是一个很好的接触。