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,因此据我了解this,Base 的构造函数中的值(在 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,但我认为我的解决方案会以某种方式在我原来的问题中找到。

我正在考虑使用一种中间方法(类似于下面提出的功能),但不确定它是否会起作用。

谢谢您的帮助!

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 回答