簡體   English   中英

如何在 C++ 模板中調用 class 的構造函數?

[英]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) {} 
}

另請參閱:通過轉發構造函數參數構造基於可變參數模板的mixin

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM