【发布时间】:2020-02-10 14:53:25
【问题描述】:
我正在编写 C++ 编写的代码,并尝试将其转换为 C 以在嵌入式平台上构建。
我想知道如何在不更改其余代码的情况下有效地转换模板以在 C 中执行相同的功能。
这是我项目中的示例文件:
template <typename T,int width,int depth>
void relu(T arr[][width][depth],T layermap[][width][depth]){
for(int k=0;k<depth;k++)
{
for(int j=0;j<width;j++)
{
for (int i=0;i<width;i++)
{
/*max*/
layermap[i][j][k]=((arr[i][j][k]>0)? arr[i][j][k]:0);
}
}
}
}
【问题讨论】:
-
手动专门化所有模板(并准备很多其他工作)
-
一个题外话,但我强烈建议将 for 循环反转为 i,j,k 而不是 k,j,i。然后它将访问具有热 CPU 高速缓存行的连续内存区域。性能提升将是显着的。
-
准备复制很多代码。说真的,为什么要这样做?为什么不直接使用 C++ 代码并添加包装器以从 C 调用它?
-
@KareemAbdelmoniem "@RichardCritten 我怎么能做这样的事情?" - 需要大量繁重的手工工作。C++ 模板的发明是出于原因。 避免大量的手工工作。没有模板?欢迎回来手工工作。
-
@Jarod42 问题是多维数组(而不是指针的指针)不能在 C 中作为参数传递。 不,它是 C++ 不支持VLA。见stackoverflow.com/questions/48901482/…