能帮我写个模板形式吗?

XHWXHWXHWchuBuLai 2010-05-03 11:41:23
我有下面这些个函数,希望能够在调用的时候简练一些。

//画单个点的函数
void GDI_DrawSolidDot(const int& x, const int& y);//实心圆点
void GDI_DrawSolidSquare(const int& x, const int& y);//实心矩形
void GDI_DrawSolidTriangle(const int& x, const int& y);//实心三角
void GDI_DrawSolidDiamond(const int& x, const int& y);//实心菱形

//画数组中全部点的函数
void GDI_DrawIntDot(int *Buffer, DWORD BufferSize);
void GDI_DrawFloatDot(float *Buffer, DWORD BufferSize);
void GDI_DrawULongDot(DWORD *Buffer, DWORD BufferSize);
void GDI_DrawDoubleDot(double *Buffer, DWORD BufferSize);

//其中GDI_DrawIntDot的函数体中有,其它的几个类似这样子的:
for(int i=0;i<BufferSize;i++)GDI_DrawSimpleDot(i,Buffer[i]);


现在我想请大侠帮我把写个模板形式的函数把,就是把下面那四个函数合成一个模板类函数?我不会写呀,还有里面的那句调用画单点的代码又怎么弄好呢?

另外还有个问题就是写成模板类函数,能不能在外部控制调用哪一种画散点的方式呢?
我知道设置一个变量int StyleFlag;
然后放在for循环里面:

for(...)
{
switch(styleFlag):
{
case(0):GDI_DrawSolidDot(i,Buffer[i]);break;
case(1):...
...

}
}


但是这样子的话每次循环都得重新判断一下,效率太低了也太麻烦了,最好是判断一次,后面画点就不判断了.
只能发100分了,还希望大侠帮个忙吧!
...全文
199 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
kingstarer 2010-05-03
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 xhwxhwxhwchubulai 的回复:]
引用 2 楼 kingstarer 的回复:
效率不低 只是麻烦 你要是用其它实现只会效率更低

请教下楼上的大侠,写成模板类效率会更低吗?但是我听人家说模板形式的可以通吃各种数据类型,简练不是会更高效吗?
[/Quote]
个人感觉模板能简化编程不能提高程序效率
假设把你的函数写成这样的模板
templet <T>
void GDI_DrawDot(T *Buffer, DWORD BufferSize)
{
...
}

虽然调用起来比较方便,不管Buffer类型,统一用GDI_DrawDot即可
但是实际运行时还是分别调用了不同的函数
向立天 2010-05-03
  • 打赏
  • 举报
回复
你这几个函数内部的处理方式完全一样么?
cattycat 2010-05-03
  • 打赏
  • 举报
回复
template <class T>
void DrawTypeDot(T* buffer,int size)
{
....
}

类似这种,但是函数中具体的根据类型画的要你自己写了,如果能抽象成一样的代码最好。
XHWXHWXHWchuBuLai 2010-05-03
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 kingstarer 的回复:]
效率不低 只是麻烦 你要是用其它实现只会效率更低
[/Quote]
请教下楼上的大侠,写成模板类效率会更低吗?但是我听人家说模板形式的可以通吃各种数据类型,简练不是会更高效吗?
kingstarer 2010-05-03
  • 打赏
  • 举报
回复
[Quote=引用楼主 xhwxhwxhwchubulai 的回复:]
我有下面这些个函数,希望能够在调用的时候简练一些。

C/C++ code

//画单个点的函数
void GDI_DrawSolidDot(const int& x, const int& y);//实心圆点
void GDI_DrawSolidSquare(const int& x, const int& y);//实心矩形
void GDI_Dr……
[/Quote]
效率不低 只是麻烦 你要是用其它实现只会效率更低
XHWXHWXHWchuBuLai 2010-05-03
  • 打赏
  • 举报
回复
就是把下面四个函数里面的参数
int *Buffer
float *Buffer
DWORD *Buffer
double *Buffer
合成一个模板形式的,没人知道吗?5555555555555
kingstarer 2010-05-03
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 xhwxhwxhwchubulai 的回复:]
谢谢大家回复了,但是我还是不太清楚第二个问题。楼上说的那个回调是怎么弄好呢?
[/Quote]
回调函数你可以百度

大概代码如下
template<class T, class Fun> //增加一个模板参数Fun
void GDI_DrawFloatDot(T *Buffer, DWORD BufferSize, Fun fun)
{
int x, y;
fun(x, y); //fun是画点函数
}

调用时这样调用
double array[100] = {0.0};
GDI_DrawFloatDot(array, 100, GDI_DrawSolidDot); //实心圆点
XHWXHWXHWchuBuLai 2010-05-03
  • 打赏
  • 举报
回复
谢谢大家回复了,但是我还是不太清楚第二个问题。楼上说的那个回调是怎么弄好呢?
太乙 2010-05-03
  • 打赏
  • 举报
回复
void GDI_DrawIntDot(int *Buffer, DWORD BufferSize);
void GDI_DrawFloatDot(float *Buffer, DWORD BufferSize);
void GDI_DrawULongDot(DWORD *Buffer, DWORD BufferSize);
void GDI_DrawDoubleDot(double *Buffer, DWORD BufferSize);
==》
template<class T>
void GDI_DrawFloatDot(T *Buffer, DWORD BufferSize);

第二个问题,可以使用回调函数来做哈!!
尹成 2010-05-03
  • 打赏
  • 举报
回复
帖子都沉底了!只能帮楼主顶到上面,以期更多高手帮楼主解决难题!

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧