@
iosyyy CRTP 是一个经典又独特的 idiom, which 完美体现了「反转」是怎么一回事,但 cpp 哪个项目试图把 spring 那一套在 cpp 上重新造一次吗? 就算我孤陋寡闻没听说过「可能被拿出来举例的项目」,但那个项目——它不流行吧?也不在 cpp 的主流视野里吧?
你看了知乎,也看了阿里这个框架想干什么的话就会明白我说的「拿锤看钉」是什么意思,就跟在 cpp 里写
template<class T, class F > class IoCContainer{std::variant<T> obj}
class MyService : public IocContainer<MyService, Feature<Service, AutoWire>> {}
一样,也不说徒劳吧,反正看着滑稽是肯定的,因为 cpp 里模板参数本身就可以当成接口来用,根本没必要去模拟注解的功能,也模拟不来,顶多仿照一个静态版本——而静态版本↑模板参数本身就可以当成接口用,service 的使用者只要写
template<class S> class UsingService{}
然后在 UsingService 实例化的地方(而非 UsingService 内,UsingService 并不直接依赖 Service ,而是自己的模板参数)给 UsingService 派发 MyService 就好,这本身就是 IoC 作为设计原则的体现,而非造一个看起来像 spring 的框架,那根本就不合适啊。
另外开闭原则指的是(广义版)逻辑模块的开闭,你这直接把整个程序都看成不可分割的一个大逻辑块的看法整得我有点无语