好奇的Mixin与可变参数的构造函数

时间:2018-08-16 07:11:27

标签: c++ variadic-templates mixins crtp injected-class-name

我截断了一段代码,其中包括各种变体的mixin crtp和一些相关问题。我是否正确理解在下面的代码中,第二个构造函数只是将那些用于实例化X的类的实例的副本传递给那些完全相同的类的构造函数?

x: BehaviorSubject<{isValue: boolean, isValue2: boolean}>
   = new BehaviorSubject({isValue: false, isValue2: true});

这种行为的用例是什么?此示例与以下代码段之间有什么区别?

template<class DerivedT>
struct CuriousBase{};

template<template<typename> typename... Features>
struct X : Features<X<Features...>> ... {
  X() = default;
  X(Features<X<Features...>> ...f) : Features<X<Features...>>(f)... {}
};

int main(){
  auto x = X<CuriousBase>{};
}

两者都可以编译,但我认为,必须明确指定X本身是可变参数类模板,但这似乎不是必需的...

非常感谢帮助

1 个答案:

答案 0 :(得分:2)

Xinjected class name,所以实际上XX<Features...>在类中是等效的。