[英]How to invoke the constructor of a class in C++ template?
考慮一個 C++ 模板 class(mixin 類),它繼承自在模板上聲明的相同 class,即
template <class Model>
class Mixin : public Model {
...
}
動機是重用這個Mixin
來為不同的Model
類擴展方法。 例如,對於 model class ModelOne
,
class ModelOne {
public:
ModelOne (int a, int b) { ... }
}
由Mixin
class “裝扮”,並進一步擴展為
class Realization : public Mixin<ModelOne> {
...
}
如何顯式調用 - 在Realization
class - ModelOne
class 的構造函數? 不同的 model class 可能有不同的構造函數簽名。
Realization
派生自Mixin<ModelOne>
,因此它需要為Mixin<ModelOne>
調用構造函數,而不是直接為ModelOne
。 然后Mixin
的構造函數可以調用其Model
的構造函數。 但是如果Mixin
不知道Model
構造函數需要哪些參數,那么Mixin
將不得不使用可變參數模板參數來傳遞所有指定的參數值,例如:
template<typename... T>
struct Mixin : T...
{
Mixin() = delete;
Mixin(Mixin const &) = delete;
Mixin(Mixin &&) = delete;
template<typename... U>
Mixin(U&&... v) : T(std::forward<U>(v))... { }
};
class ModelOne
{
public:
ModelOne (int a, int b) { ... }
};
class Realization : public Mixin<ModelOne>
{
...
public:
Realization() : Mixin<ModelOne>(1, 2) {}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.