在基于 Alexandrescu策略的设计中,我不理解的是创建没有任何共同点的新类型,在我看来,仍然有很多共同点应该以某种方式表示。
例如,std::string
and std::basic_string<>
: 分配器是非常内部的东西,在我看来,使用该类的代码不应知道该类正在使用哪个分配器。
但是由于已经创建了一个新类型,比如说std::basic_string_1
,所有那些在 an 周围传递的方法std::string&
基本上都被破坏了,而且我看不出一个正当的理由,为什么带有不同分配器的 an 应该被认为与带有另一个分配器std::basic_string<>
的完全不同。std::basic_string<>
我的问题是:为什么每个人都没有共同的父母std::basic_string<>
,这样就可以避免这个问题?通常在我的代码中,当我有 a 时Whatever<T>
,我让它继承自WhateverBase
某种 a ,并且当T
没有显示在该类的公共接口上时,它可以很好地工作......