C ++ - 使用构造函数中的推断模板参数作为模板参数,通过类

时间:2013-04-07 15:53:50

标签: c++ templates constructor

我想在构造函数参数中使用推断类型作为我班级其余部分的模板参数。这可能吗?

这样的事情:

    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,因此根据我的理解,Base的构造函数中的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,但我认为我的解决方案会在我原来的问题中找到。

我正在考虑使用中间方法(类似于下面提出的功能)但不确定它是否有效。

感谢您的帮助!

1 个答案:

答案 0 :(得分: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);
};