【发布时间】:2016-02-20 14:06:25
【问题描述】:
我不理解 Alexandrescu 基于策略的设计 是创建没有任何共同点的新类型,在我看来,仍然有很多共同点应该以某种方式表示。
例如,std::string 和 std::basic_string<>:分配器是非常内部的东西,在我看来,使用该类的代码不应知道该类正在使用哪个分配器。
但是由于创建了一个新类型,比如说std::basic_string_1,所有那些在std::string& 周围传递的方法基本上都被破坏了,我看不出有一个正当理由为什么std::basic_string<> 有不同的分配器应被视为与带有另一个分配器的std::basic_string<> 完全不同。
我的问题是:为什么每个std::basic_string<> 都没有共同的父母,这样就可以避免这个问题?通常在我的代码中,当我有一个Whatever<T> 时,我让它继承自某种WhateverBase,并且当T 没有显示在该类的公共界面上时,它可以很好地工作......
【问题讨论】:
-
如果您需要运行时多态分配器支持,您可以使用
std::experimental::polymorphic_allocator。 -
您可以避免一些问题,但不可避免地会产生一些其他问题。这是一种权衡。
标签: c++ string templates stdstring policy-based-design