VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
楼主: zjzengjian

讨论:template技术就只是做类库的?

[复制链接]

0

主题

41

帖子

28.00

积分

新手上路

Rank: 1

积分
28.00
发表于 2020-1-28 10:00:02 | 显示全部楼层
谁说的,我的代码里面有很多的template,但template不一定是泛型,比如atl中的用法,形成继承体系。省去虚表实现静态多态。
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-2-2 10:54:01 | 显示全部楼层
kuo123456 wrote:
> 模版元编程
> 一个hack

It isn't just a hack, actually it has already become a serious technique, which has had big impact on library construction.

cocheng8230 wrote:
> 是学院派的一种代表,
> 不过代表了以后的语言所发展的趋势
> 从学院派到工程应用需要经过很长的时间
> 建议楼主可以看看0x标准的相关的报道就可以知道一些情况了.

Actually, templates originated techniques are as practical as any other language techniques. That it's originally motivated by the desire to construct an efficient and elegant container/algorithm library is the first clue and the most obvious evidence.
回复

使用道具 举报

0

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-2-5 21:30:02 | 显示全部楼层
mark
回复

使用道具 举报

1

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
 楼主| 发表于 2020-2-10 18:15:01 | 显示全部楼层
GP比较高端的应用大概就是WTL了吧,java有j2se,c#有.net,c++为什么不能有一个更大规模的范型框架呢,难道真的就象浮生兄说的“比如需要一个FTP类进行数据传输,对FTP类的复用上,GP没有优势. ”
可能是我做OOP太久了,思维方式已经转变不了成GP了,比当初因为学了《设计模式》而进行模式困难的多。STL里的很多算法是挺适合用template的,会GP的新手凭第一感觉也能想到template it,但是在高端应用里,又几乎感觉不到GP的优势,也不知道有谁,有哪个软件,已经从GP建模里尝到了好处。。。
回复

使用道具 举报

1

主题

4

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-2-12 12:45:01 | 显示全部楼层
我是个新手,多少懂点template,举个例子吧


首先一个template class例如
template<class T, class HandleType>
class StartThread
{
private:
        ..............;
public:
      HandleType Run(T &t)
      {
           ......;
           return t.run();
      }


};

这个template class 的意思是说要这个T 具有一个返回值为 HandleType run();的成员函数
你可以把这段.....; return t.run();这部分代码用到你的库的linux版本或者win32版本等等,它只跟  run();这段文本有关(宏也可以)

但是你换成OO的话就是这个样子:

#if defined (_WIN32)

typedef void* MyLibHandle;

#else

typedef int MyLibHandle;

#endif

class AbstractRunnerable
{
virtual MyLibHandle run() = 0;

};

class StartThread
{
public:
       MyLibHandle Run(AbstractRunnerable & t)
        {
             .....;
             return t.run();
        }
};

这只是个小例子,可能其它人有更优雅的OO方法.

我个人觉得不论是OO的运行时多态还是GP的编译时多态,都提供的是一种类似控制反转似的功能.
归根到底都是这个GP StartThread 或者OO StartThread只能保证一部分代码是固定的,他们都不具有完整的行为,需要外部类型来填充,继承AbstractRunnerable或者
StartThread<Runner> 的意思都是填充一个行为;我认为理论上说选择哪个都是无所谓的事情, 但这说的只是一些基础的库,他们的流程是基本固定的,例如vector,list,或者thread, 他们的流程大多数是固定的,例如排序等等,只需要注入一个operator<等等就OK;GP更适合表述流程概念.设计模式的template模式差不多就是这个道理;


但是在大多数软件开发中不断改动的可能是流程,这时候GP提供的封装流程(算法)的功能用处就不大了,用OO完全可以表述清楚一个类型了,为何非要GP呢?













回复

使用道具 举报

1

主题

4

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-2-12 23:45:01 | 显示全部楼层
上面我说的那个例子也说明了一个问题,就是GP更隐晦,很容易出现HandleType缺乏默认构造函数等等的问题,但是OO版本的要清晰的多,但是缺乏优雅;

GP提供了C++一种自我修复的能力,最起码从形式上能给这门语言提供一种类似动态语言那样的语法,只是形式上而已,我们应当看到boost或者loki等库用了大量的hack && template && macro技巧只为了实现形式(语法)上的优雅.但这种东西在实际开发中可能被认为是无聊的东西.
回复

使用道具 举报

0

主题

5

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
发表于 2020-2-15 23:15:01 | 显示全部楼层
使用良好的接口继承可以增加代码复用从而避免使用模板,而且会得到一些额外的好处。
不过缺点就是动态链编影响效率,而且不是任何时候都可以使用接口的,模板就显得更为自由(带来的问题也多。。。)
回复

使用道具 举报

1

主题

39

帖子

27.00

积分

新手上路

Rank: 1

积分
27.00
发表于 2020-5-28 15:15:02 | 显示全部楼层
模板的出错会让人很郁闷,不过或许熟练了就没问题了.

模板技术可以用在很多方面,不是非要用,只是如果觉得适当的地方,却另谋他法,这也没必要吧.
比如stl的容器类,就是值得我们模仿的,因为有这个应用在,出错的几率也比较低.

在其他方面,要使用模板,就要慎重考虑自己和同志们的能力了.

回复

使用道具 举报

1

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
 楼主| 发表于 2020-8-14 17:15:01 | 显示全部楼层
我认为GP的业务建模是个趋势,以后可能出现专用于GP分析的类似UML的东西
回复

使用道具 举报

0

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-8-16 14:00:01 | 显示全部楼层
mark 学习.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表