【发布时间】:2020-03-05 16:56:44
【问题描述】:
除了单个类A 之外,我有一个具有完全通用实现的库。该类只有一个函数int format(int i){},但不能按原样使用:format取决于每个不同的应用程序,需要用户自定义。特别是,format 有很多 if-then 语句需要为应用程序的环境正确设置。但是,该库的其余部分是完全通用的,并且可以与特定规范内的任何format 选择一起使用。
问题:让我的库的用户定义format 的工作方式的最佳方式是什么?这需要在代码级别完成(而不是仅使用配置文件)。
显而易见的想法是让用户直接在源代码上直接重写format 的定义,但这听起来不是最优雅的方式。
另一个想法是使用继承:让用户定义一个从A 继承的userA 类,然后隐藏format 函数。但是库的其余部分使用类A 而不是userA。此时,可以用类型名desiredA 替换A 的所有实例,然后让用户将该类型名定义为userA。这也不是很优雅。
一定有更好的方法来做到这一点吧?
【问题讨论】:
-
有几种方法可以做到这一点,这取决于具体哪一种可能更好。需要权衡取舍。
-
您应该更具体地说明您希望他们能够进行的更改类型。您只是在谈论数据类型,还是对库的结构进行整体更改?
-
@Andrew 函数的签名将始终相同,但实现会有所不同。图书馆不会发生其他变化
-
你考虑过使用函数模板吗? programiz.com/cpp-programming/templates 似乎如果实施得当,这将实现您想要的。
-
format的实施变化有多大?我们是在谈论一些数字参数,还是更激烈的事情,比如除了函数签名之外应用程序之间没有共享代码?可能的实现数量是否有限制,或者更像是没有两个应用程序会使用相同版本的format?
标签: c++ class inheritance design-patterns