4

クラスの残りの部分全体で、コンストラクター引数から推定された型をテンプレート引数として使用したいと思います。これは可能ですか?

このようなもの:

    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 は Base から継承しますが、DerivedB は DerivedA から継承します。したがって、thisBase のコンストラクター (DerivedA にある) の値は実際には DerivedB へのポインターであるため、推論された型はBaseDerivedB 型になります。 . ただし、コンストラクターだけに限定するのではなく、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
}

**私の主な目標は、基本クラスで継承クラス型を使用することです。これは一種の別の質問だと思いますが、元の質問で解決策が見つかると思っていました。

私は仲介方法(以下で提案されている機能に似ています)を使用することを考えていますが、それが機能するかどうかはわかりません.

助けてくれてありがとう!

4

1 に答える 1

5

いいえ。

ただし、クラス全体をテンプレート クラスにして、型推論を行うファクトリ関数を作成してテンプレート クラスを生成することはできます。

template<typename C>
class AnyClass {
public:
  AnyClass( C* c );
  std::vector<C> vec;
};
AnyClass<C> make_any_class( C* c ) {
  return AnyClass<C>(c);
};
于 2013-04-07T15:57:00.380 に答える