人生半路, 杀出个程序

什么时候才能学会编程啊?

共2页: 1 2 
用非虚函数来包装虚函数这个做法虽然早就听过, 但是我一直没明白什么场合需要用. 到使用虚函数包装非虚函数的"代理"技术, 倒是时不常的能用到.
re: 我的编辑器 0.80 欲三更 2011-11-03 06:12
@megax
那我就再支持一下吧----我提个不知道对不对的建议啊, 只是我的个人意见,. 如果你要提供插件机制的话, 不要写成notpad++那样的模式, 非常不稳定, 一个插件出错程序就崩溃了. 最好能提供一个脚本接口. 就像那两尊编辑器大神或者firefox那样.
re: 我的编辑器 0.80 欲三更 2011-11-01 18:50
@megax
textmate那是跟ROR合谋炒作的结果...另外你要考虑到mac是一个比win23商业环境好得多的系统. 不过你的demo我下载了试用过了, 确实很清新.
这个有点geek的过分了吧?
re: 我的编辑器 0.80 欲三更 2011-11-01 02:58
@megax
如果你想做收费软件的话, 这么说吧, 至少在win32上, Notepad++就是个参照系, 你有信心做的比npp好吗? npp可是免费的.
re: 我的编辑器 0.80 欲三更 2011-11-01 02:52
@megax
开不开源区别都不大, 不过文本编辑器很难"改善生活"吧? 毕竟这东西都是程序员自己在用, 顶多面试或者程序员聚会的时候秀一秀.
@路过
谢谢, 受教了. 若不是你的提醒我不会注意到flash的shareobject...虽然我现在还没太弄明白你的方法的原理..
@哇
但是我估计它转正的可能性并不大. 这个东西能做的事情太多了.
刚才玩了一下那个飞机游戏,有点难啊。。。不过真的跟精致,动画效果真到位,赞一个!
那个飞机游戏看着挺好
@jans2002
因为只是个雏形,很多功能还没做呢,代码稀烂稀烂的,我都不好意思拿出来。
再说我都把原理和实现说的这么清楚了,相关文档也有链接,应该比提供代码还容易懂吧?
re: min(x,y)高效算法 欲三更 2011-09-03 04:01
@TTEE
那应该是编译器把if else方法优化了。
1.按照lz的逻辑,F22战机的严重危害是它们太费油——你都使用导出类了,还在乎什么内联函数?

2.stl代码里面什么时候有导出类的符号了?VC的crt说的是C库。

3.这个时候,进程中的内存结构产生了微妙的变化……以我的经验,任何一个头脑正常的工程师都不会做这样的事情!

4.现在谈COM之类的东西,我怎么感觉这是5年前的文章?
哈哈,其实我也造过这么一个轮子,当时我想出来好多INI文件的扩展。又是#include,又是宏,又是域和子域。。。乱七八糟一大套,结果写完到最后自己不会用了。。。那些功能我自己都没在逻辑上琢磨明白~~
何必呢,直接用xml dom有什么不好的?
re: 自制虚拟机框架 欲三更 2011-07-11 08:30
祝你早日把linux在你的虚拟机上boot起来~
re: 做了 一个 xp 透明窗口 欲三更 2011-06-08 15:00
咦?你用Qt怎么做到的光滑圆角?我用Qt的透明模板功能做出来效果不好,圆角处霍霍牙牙的。
每个IT男硬盘伸出都有一个当年写的俄罗斯方块~
你这个准备拿来创业么?
@打击装B犯
你说的很对哈哈

不过这个东西倒是也有用,可以计算合理TCP缓冲区大小。
Lingoes没有生词本功能么? 抱歉我没用过. 有道是有的.
@千暮(zblc)
maybe引起你回忆的那篇文章是我的拙作...
也就是说这段代码目前有错误是吧?

那我就不在我那里加链接了^_^
不同模块的内存问题,我觉得这简直是一个c++设计欠考虑的地方。就算是不重载new也不见得没问题。只要不是自己源码编译的模块都不保险。
任何时候都不应该写这样的代码:

qsort(数据指针,元素个数,单个元素的字节数,"YXZQQQ\213\0+\2\303");
re: Small Basic初体验 欲三更 2011-02-21 18:09
这个玩意试用过一次, 确实蛮好玩的, 里面有个乌龟, 可以利用它来做出分形图.
说起来是这些方法,但是在涉及到跨模块的时候,所有的模板方法都会有一定问题,然后虚函数,也就是接口的方法又不够灵活,最后,涉及到跨线程的时候,所有的方法都面临极大考验。

总结:
1.c++基本上就解决不了回调这个问题
2.c++鼓励源码级的复用,而不是二进制模块级的复用
3.c++还是不大适合多线程

PS:我记得还有一个cppsignal库和boost::signal也能用于这个功能。其实具体到一个领域,比如GUI,那么windows的消息机制其实是最好的。
我记得C++类模板自动有 __declspec(dllexport)的标签,不用写。

然后要导出摸板的话,可以这样:

#ifdef DLL_EXPORT
#define EXPORT extern
#else
#define EXPORT
#endif

EXPORT template class NormalMembers<int>;

需要的话我就这样导出,但是这个东西我感觉不太实用,因为我经常遇到一个模板类要实例化好几十种实例的情况,比如每写一个类就要用到某个模板的,这样类多了要是一个一个导出,实在太麻烦了。
re: 2009-2010小结(四) 欲三更 2011-01-26 11:12
呵呵,字里行间已经看出你的郁闷了^_^

关于框架设计的好不好,我有个比较浅显的判断方法:
如果一个层次结构包含了一大堆类,接口,封装。但是:1.如果在实现中还是要频繁的判断这个判断那个,那基本上这个设计可能有问题。2.如果调用一个功能需要涉及一对类,一会这个类一会那个类的,那也基本上是有问题了。

至于同步异步的问题,坦白说,异步的复杂性太高了,根本得不偿失。
re: 也谈谈GUI框架 欲三更 2011-01-26 01:40
顺便说一句,你要是想如你所说把两个param的解析彻底封装起来,你这个MsgMap的模式可能要改。因为为了方便使用,对于不同消息可能要有一些特殊的处理步骤,而且你自己可能还要塞一些自己的消息进去,你可能得多封装一层
re: 也谈谈GUI框架 欲三更 2011-01-26 00:29
按照我暂时的体会,我倒觉得GUI框架的难点不在你说的这几个点上。我说说我的体会:

首先,基本库的选型。基本的容器和算法可以使用stl,但是stl有个问题就是他是模板库,可能会遇到版本和内存问题,而且stl的string类不太好用,至少在多种编码方式共存的情况下不太好用,我的解决方法是自己写一个string类,内部使用ucs-2,支持比较常用的编码转换,不常用的那些可以引入iconv。string用自己会带来附加问题,就是一些基于字符串的功能要自己写,比如常用的xml封装等等,可以自己实现够用的就行,也可以找支持多种编码的库来集成。

然后是GUI API的封装,最常用的比如win21和Xwindows,这个其实也不好做,主要是要制定一套合理的接口和错误码机制,这个要对几种系统的功能覆盖面和特点有全面的了解,以我现在的水平还不太行。而且这部分很繁杂。

再然后是类层次的设计,这个我们可以参考比较经典的实现,比如MFC或者QT。我个人比较喜欢的是borland的VCL,思想朴实但是绝对够用。这里面比较复杂的部分是我觉得是:首先控件主要分两种,一种是带窗口id(win上师句柄)的,另一种是不带id的,完全自己封装的“伪控件”,这两种结合在一起统一管理,不太好做。其次这一步如果不合理,那可扩展性就会变得不好。

接下来就是伪控件的实现,这个部分要实现的很多,要仿照原生控件实现z-order的管理,消息传递等等,要思考得很清楚才行。

再下来是渲染,我个人倾向于完全自己渲染,大部分人不同意,但是我觉的这样更好实现界面的统一。如果自己渲染的话,首先得懂一点美工或者认识一个洞美工的给你把把关,不能太难看,其次分块渲染这部分本来就不太好做,可以使用gdi+,但是跨平台的话就得用一些开源库比如agg。那你还得封装一层,这个确实是工作量的问题。

下面的问题我和你的观点倒是一样的,就是回调函数的问题。这是个大问题,首先要实现回调函数成员化,这个不难,属于小技巧吧,可能高手实现的话效率会好一点。但是回调函数和多线程结合起来,怎么做一个比较好的实现还是不容易,我是做了一个qt机制的简化版,勉强能用吧,但是我觉得不太好。而且这里还有一个问题就是如果你的框架被用来写模块,主程序不是你的,怎么办?比如我用你的框架写了一个ActiveX,怎么搞。所以这个回调机制得是应单线程,同步,异步,以及没有消息队列的情况。我觉得高手来做的话这部分会很精彩,比如qt。

最后就是附带性的问题了,比如怎么支持皮肤,怎么支持RAD开发,是不是要支持外挂脚本。这些工作量绝对不小于核心功能的工作量。还有你说的大量空间,别的就不说了光一个彩色多字号的文本编辑器,就要用去不少时间了。

以上是我的想法,有点啰嗦,欢迎批评^_^
呵呵,我看到文章的开头就猜飞秋加密用的应该是飞鸽传书源码里的某种加密算法,果不其然哈哈^_^
其实dll导出类还是挺好用的,虽然有各种各样的限制,但是它使用起来是最好看的,比c函数和接口导出都好看。

基本上如果你手上有一个有源码的类库,在不考虑模板的前提下,编译成dll使用还是很方便的。
re: C++的流设计很糟糕[未登录] 欲三更 2010-07-09 23:15
没太看明白。lz的意思是不是说C++的流设计倒是用户不能确定什么时候写入的信息会真正流入到IO设备里,如果是这样的话我觉得这种东西应该放在文档里。

stream << "abc" << "def" << endl; 这里你看不出来什么时候结束,
难道printf("%s%s\r\n", "abc", "def");你就能看出来了? 还不是要看文档才知道?
re: 关于C++之“复杂” 欲三更 2010-07-09 15:27
丝毫不怀疑C++的复杂性,因为自己有时候也会掉到陷阱里。

但是我很怀疑:一个用C++时不停的犯错误,代码质量糟糕,或者在语言特性的框架之内经常感到一些功能实现不了的人如果转用了java,C#或者脚本语言,那么他写出的程序水平或者质量就能“自动”的上一个台阶么?

我不太相信这个。
对代码的编码格式有要求么?
re: C++实用技巧(一) 欲三更 2010-06-24 01:13
我倾向更激进的策略:
1.尽量少用指针指向的数组,用的话尽量用对象把他们包装起来。
2.调试时期的代码中检查每一个指针的合法性,不合法立刻崩溃。
3.多线程程序中如果一个对象包装了带锁的资源,那这个对象要么是全局的,要么只能有一个指定的线程来delete,而这个线程不使用相关资源。
4.少new,少delete,最好能别new就别new。
。。。
re: Notepad++自定义语言的添加 欲三更 2010-06-06 07:10
@战魂小筑
谢了,界面上没有,因该是在xml里定义吧,看看文档去。。。
阅读代码也是一种天赋。。。
re: Notepad++自定义语言的添加 欲三更 2010-06-04 19:41
菜鸟问, npp有没有什么办法把背景改成黑的? 我研究了半天, 只把有字的部分背景改成了黑的, 空白的地方还是白的...我都想直接改程序了~
这个东西要是学C、C++的起点吧? 要是连这个都不知道,那就是根本就没学过C/C++了。
re: 偶见CSDN的VC6的猛人[未登录] 欲三更 2010-05-04 21:11
其实如果单单开发mfc或者使用c++开发socket之类的程序, 确实vc6是够用而且很方便的。你想连WPS那么复杂的软件用VC6都没问题,我们平时开发程序能有什么问题?

当然,前提是别涉及c++的一些“深度”特性。
@expter
我知道你是这个意思, 但还是觉得太奢侈了.
反正你只把相同尺寸的Buffer连在一起, 能不能这样简单点搞搞?:

template <size_t s>
struct Buffer
{
----static size_t Size;
----union
----{
--------struct
--------{
------------Buffer<s> *pNext;
------------Buffer<s> *pPrevious;
--------}p;
--------char m_pBuf[s];
----}
};

然后模板显式实例化顺便把静态成员也赋上值.
@qiaojie
要是人家不用list呢?
mempool大概就是这样子吧, 我应该写不出这么好:)

但是: 1. 如果我要申请的是8字节这么大的内存, 那么内存浪费的比率就非常之大!
2. struct Buffer: CNode<Buffer>
{
eBuff_Type type;
};

就说这个结构, 就为了记录一个大小, 每个对象里都要存储一个变量, 不觉得浪费么?
@溪流
我只能说, 还好有小巧的WTL...
共2页: 1 2 

导航

统计

常用链接

留言簿(1)

随笔档案(1)

另一个我

最新评论