簡體   English   中英

C ++ - 使用構造函數中的推斷模板參數作為模板參數,通過類

[英]C++ - Use inferred template argument from constructor as template argument throughtout class

我想在構造函數參數中使用推斷類型作為我班級其余部分的模板參數。 這可能嗎?

像這樣的東西:

    class AnyClass 
    {
    public:
      template<Class C>
      AnyClass(C *c) {
      //class C is inferred by constructor argument
      }
      // constructor argument is used as argument in other template types
      nestclass<C> myNestedClass;
      void randomfunction(C *randonarg) {
      }
    }

細節:

這就是事情。 考慮到繼承類的類型,我正在嘗試初始化我的基類型。 在下面DerivedA的情況下,從基本繼承,但DerivedB從DerivedA繼承,因此,從我了解的價值this在基地(在DerivedA找到)的構造函數實際上是一個指向DerivedB因此推斷型Base將成為輸入DerivedB。 但是我想在我的Base類的其余部分中使用這種類型,而不僅僅是將它限制在構造函數中。

class Base {

// type T derived from inheriting class
template<T>
Base(T *) {};
//like to use other places
void randomfunction(T *arg1) {
//does something with type T
};
}

class DerivedA : publicBase {

DerivedA() : Base(this) { //this should be a pointer to DerivedB, since it is inherited 
                          //from DerivedB.
}

}

class DerivedB : class DerivedA {
//anything
}

**我的主要目標是在我的基類中使用繼承類類型。 我意識到這是一個不同的qst,但我在想我的解決方案會在我原來的問題中找到。

我正在考慮使用中間方法(類似於下面提出的功能),但不確定它是否可行。

謝謝您的幫助!

沒有。

但是,您可以將整個類設置為模板類,並創建一個工具函數,該函數執行類型推導以生成模板類。

template<typename C>
class AnyClass {
public:
  AnyClass( C* c );
  std::vector<C> vec;
};
AnyClass<C> make_any_class( C* c ) {
  return AnyClass<C>(c);
};

暫無
暫無

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

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