c - 为 C 重写 C++ 模板

标签 c templates compression

任何人都可以帮助我将此代码从 C++ 重写为 C...(它有模板...yeeee :)) 谢谢。

template <class T>
void SWAP( T& t1, T& t2 ) 
  { 
    T tmp=t1; 
  t1=t2;
    t2=tmp;
  }

还有这个

template <class CMP, class Element>
void sh_qsort( Element* array, uint lo, uint hi )
  {
    some code...
  }

并且 sh_qsort 被称为 sh_qsort<TEST>( test_file, 0, 255 ) 其中 TEST

struct TEST {

static int  c( uint* A, int x, int y ) 
{
  uint px = A[x];
  uint py = A[y];
  int r,s;
  s = (px<py) ? SWAP(px,py),0x80000000 : 0;
  byte* p = &f_buf[px]; 
  byte* th = &f_buf[blocksize];
  byte* q = &f_buf[py];
  for(; (r=1,p<th) && ((r=(*p)-(*q))==0); p++,q++ );
  return r^s;
}

static void s( uint* A, int x, int y )
  {
    SWAP( A[x], A[y] );
  }
};

以及如何用 c 重写这个结构。

简单整洁...帮助 :)

谢谢!

最佳答案

假设 sh_qsort() 实际上是一个快速排序实现,您需要做的就是将 TEST::c() 重构为 所期望的比较函数来自 stdlib.h 的 qsort()

从通过模板的编译时通用代码到通过 void * 的运行时通用代码通常会带来性能损失,您可以通过使用所谓的“X-macros”来摆脱这种损失用预处理器模拟模板。然而,可能没有必要麻烦:因为 TEST::c() 足够复杂,它可能不会被内联,你只需要为运行时通用的使用付费由 qsort() 执行的交换。

关于c - 为 C 重写 C++ 模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5179371/

相关文章:

size - 如何找到 ionic zip 文件的未压缩大小

optimization - 最高效的多页 RequireJS 和 Almond 设置

c# - 在 XML 文件中有效地存储图像

c++ - 您是否应该使用显式类型转换更正有关类型转换的编译器警告?

c++ - 从 cl_context 创建 OpenCL 上下文而不获取所有权

javascript - Meteor:如何根据数据库中的值设置单选按钮的值

c++ - 返回值的静态模板函数特化

c++ - 使用 std::future 无效使用不完整类型

将程序转换为使用函数,现在运行时不执行任何操作

c - 员工工资单接收信息并将其放入数组中