【发布时间】:2023-03-20 06:43:01
【问题描述】:
我想在我的类的其余部分中使用从构造函数参数推断出的类型作为模板参数。这可能吗?
类似这样的:
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 的指针,因此推断类型在 @987654324 @ 将是 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,但我认为我的解决方案会以某种方式在我原来的问题中找到。
我正在考虑使用一种中间方法(类似于下面提出的功能),但不确定它是否会起作用。
感谢您的帮助!
【问题讨论】:
-
没有。我在下面给出了一个相关问题的答案,但您可以更详细地描述您的用例,也许您遇到的真正问题可以得到解决!
-
也许你想看看CRTP(奇怪的是重复出现的模板模式)?
-
是的,CRTP 是执行此操作的正确方法。如果您需要到父级的单个二进制接口,请执行两阶段 CRTP,具有接口类和 CRTP 实现基,然后是派生。
标签: c++ templates constructor