为什么C ++中的模板mixin不再是一个中流砥柱?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (38)

我在C ++中使用了模板mixins,但我想知道为什么这个技术没有被更多地使用。这似乎是最终的重用。这种力量和效率的结合是我真正喜欢C ++的原因之一,并且无法看到自己正转向JIT语言。

这篇文章:http : //www.thinkbottomup.com.au/site/blog/C%20%20_Mixins_-_Reuse_through_inheritance_is_good是一个很好的背景资料,如果你不知道它们是什么,并且在重用方面如此清晰和性能。

提问于
用户回答回答于

模板需要实现在翻译单元中可见,而不仅仅是在链接时(C ++ 11地址,如果您只使用指针或参考实例)。

另外,每个模板实例化都会创建一个不同的类型,这意味着要在任何模板实例上工作的函数必须能够接受它们 - 要么自己被强制模板化,要么需要一种向运行时多态性切换的形式通常很容易做到:只需要一个抽象基类来表示一组支持的操作,还有一些“给我一个访问器”函数,该函数返回一个派生对象,该对象带有一个指向虚拟调度表中的模板实例和相关条目的指针) 。

用户回答回答于

mixin的问题是......建设:

class Base1 { public: Base1(Dummy volatile&, int); };

class Base2 { public: Base2(Special const&, Special const&); };

现在,我的超级混搭:

template <typename T>
struct Mixin: T {};

这是一个很难的问题,直到C ++ 11增强了语言才能获得完美的转发之后,它才得以解决:

// std::foward is in <utility>

template <typename T>
struct Mixin: T {
  template <typename... Args>
  explicit Mixin(Args&&... args): T(std::forward<Args>(args...)) {}
};

这是一个很难的问题,直到C ++ 11增强了语言才能获得完美的转发之后,它才得以解决

扫码关注云+社区

领取腾讯云代金券