有趣的是,这篇paper刚好极好地说明了为什么接口应该永远消失(为什么接口跟模板应该统一起来——实际上ruby这样新进的语言已经这么做了),取而代以真正first-class的运行时泛型。
已上传到文件区了。 http://groups.google.com/group/pongba/web/Runtime+Polymorphic+Generic+Programming.pdf
文章介绍的是如何在C++里面实现运行时的泛型。
好啊,正想发帖问这方面资料呢。:)
这两天正在思考这个问题呢。
而且我似乎发现Runtime Unbound实际上可以同Runtime Bound一样性能,只要加上点运行时的concept。整个地就可以让动多态退休了。
如果由语言实现呢?
语言实现的话可以废弃虚函数,让对象布局最简单。
没有虚函数,继承用处还是很大的。主要还是回归到代码重用的作用,is-a的关系还在,只是继承类改变基类行为的方式变了。
我觉得可以这样:
class SomeClass
{
};
class ISome
{
virtual void func() = 0;
};
concept CSome
{
void func();
};
concept_map(ISome to CSome); // 这东西是这么用么?记不清细节了:p
template<CSome T>
void generic(T arg);
generic<SomeClass>(foo); // 设计时就知道是什么类型的
class OtherDyn : public ISome
{
// 把ISome的接口映射到SomeClass的方法上
SomeClass some_;
};
generic<ISome>(otherDyn); // 运行时才知道会是什么类型的
这样,不是又能统一两者,又只有一套代码么?除了要手动写OtherDyn类把SomeClass映射到ISome接口上去,其余都挺直观的吧?
在 07-12-14,莫华枫<longsh...@gmail.com> 写道:
--
新的理论从少数人的主张到一统天下,并不是因为这个理论说服了别人抛弃旧观点,而是因为一代人的逝去。
My blog: http://googollee.blog.163.com
我觉得有时候会需要不同方式的对同一问题的具体手段, 不见得一定是一个涵盖了另一个, 另一个就毫无必要了, 关于Concept这个问题没有仔细琢
磨过, 就不胡说八道了. 在C#中是where T : 接口一, 接口二, 这么和接口统一的, 可惜C#的泛型本身比起模板是太弱了, 除了扩散
到解决方案各处, 是干嘛嘛不行, 而且只有运行时多态.
On Dec 14, 7:47 pm, "莫华枫" < longshank...@gmail.com> wrote:
> concept起到了抽象接口的作用,而且适应面更广泛。(甚至可以对类型的尺寸作出规约)。
>
> On Dec 14, 2007 7:19 PM, Eli < Eli...@gmail.com> wrote:
>
> > 其实我觉得接口倒是可以保留, 因为接口有时可以当作一个使用说明, 更何况还有与遗留系统的兼容问题.
>
> > On Dec 5, 8:25 pm, pongba <pon...@gmail.com> wrote:
>
> > 有趣的是,这篇paper刚好极好地说明了为什么接口应该永远消失(为什么接口跟模板应该统一起来----实际上ruby这样新进的语言已经这么做了),取而代以真正first-class的运行时泛型。
> > > 已上传到文件区了。
> > http://groups.google.com/group/pongba/web/Runtime+Polymorphic+Generic...
>
> > > 文章介绍的是如何在C++里面实现运行时的泛型。
>
> > > --
> > > 刘未鹏(pongba)|C++的罗浮宫 http://blog.csdn.net/pongba
> > > TopLanguagehttp://groups.google.com/group/pongba
>
> --
> 反者道之动,弱者道之用
> m...@seaskysh.com
> longshank...@gmail .comhttp://blog.csdn.net/longshanks/