c++ - 为什么 C++ 中的模板 mixin 不再是主流?

标签 c++ performance templates reusability mixins

我在 C++ 中经常使用模板混合,但我想知道为什么没有更多地使用该技术。这似乎是重用的终极目标。这种功能和效率的结合是我真正喜欢 C++ 并且无法看到自己转向 JIT 语言的原因之一。

本文:http://www.thinkbottomup.com.au/site/blog/C%20%20_Mixins_-_Reuse_through_inheritance_is_good如果您不知道它们是什么,它是一个很好的背景知识,并且在重用和性能方面如此清楚地说明了情况。

最佳答案

mixins 的问题是......构造。

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

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

现在,我的 super 混音器:

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

您注意到这里的问题了吗?我到底应该如何将参数传递给基类的构造函数? Mixin 应该提出什么样的构造函数?

这是一个很难解决的问题,直到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...)) {}
};

注意:欢迎进行双重检查

所以现在我们真的可以使用 mixins...而且只需要改变人们的习惯 :)

当然,我们是否真的想要是完全不同的主题。

mixins 的一个问题(你引用的那篇糟糕的文章很高兴跳过)是你完全失去了依赖隔离......以及 LoggingTask 的用户然后绑定(bind)到编写模板的事实方法。在非常大的代码库中,更多地关注依赖关系而不是性能,因为依赖关系消耗人力周期,而性能只消耗 CPU 周期......而且这些通常更便宜。

关于c++ - 为什么 C++ 中的模板 mixin 不再是主流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8755453/

相关文章:

c++ 使用子类 'type cast' 错误

c++ - if 语句内满足的条件的索引

c++ - 尝试优化和理解打印数字除数的递归函数的运行时

c++ - 这个 operator() 语法有什么作用?

c# - WPF 标签数据模板

C++ 在不知道其参数的情况下保留对模板实例的引用

c++ - 为什么不自动确定类模板构造函数参数?

c++ - 将 String 的内容放入 Char 数组

performance - GPU 的最佳性能

php - 搜索多个值,按相关性排序(php + MySQL,无全文搜索)