【发布时间】:2022-11-12 07:52:24
【问题描述】:
这就是我正在尝试的:
C 是SomeClass 或SomeDerivedClass 的模板参数:
class SomeClass
{
protected:
int ProtectedBaseClassMember;
virtual void SomeFunctionFromBaseClass();
};
class SomeDerivedClass : public SomeClass { };
如何将C限制为SomeClass的子类?
template<class C>
class SmuggleInBetween : public C
{
public:
SmuggleInBetween()
{
// does not compile: unknown symbol "ProtectedBaseClassMember"
ProtectedBaseClassMember = 5;
// does compile, but ...
SomeClass* Me = static_cast<SomeClass>(this);
// ... member not accessible:
Me->ProtectedBaseClassMember = 5;
}
protected:
// doesn't compile: "method with override specifier did not override any base class method"
virtual void SomeFunctionFromBaseClass() override;
double DoubleProperty;
};
我发现了非常相关的问题:Restrict C++ Template parameter to subclass, 但是那里的作者似乎很好,只是限制了模板参数而没有 从基类访问任何符号。
模板化 SmuggleInBetween 类的用例是这样的:
我可以创造
class SomeImprovedClass : public SmuggleInBetween<SomeClass> { };
和
class SomeImprovedDerivedClass : public SmuggleInBetween<SomeDerivedClass> { };
无需复制我的代码走私进来的通过这种模式(如果可能)。
顺便说一句,这发生在虚幻引擎的上下文中。 可能在 C++ 中可行的解决方案仍然会导致 Unreal Header Tool 更加头疼,它有时不能容忍偏离已知路径太远的东西。
【问题讨论】:
标签: c++ templates class-template template-inheritance