我想要一个模板父类(虚拟)。子类继承自父类并在其内部定义类型。
// PARENT
template <typename A, typename B>
class Parent
{
public:
Parent();
virtual ~Parent();
// ...
};
// CHILD
class Child : public Parent<SomeStruct , AnotherStruct>
{
public:
struct SomeStruct
{/*...*/};
struct AnotherStruct
{/*...*/};
Child();
~Child();
// ...
};
显然,编译器会提示尚未定义的“SomeStruct”。问题是如何实现类似的东西。一种简单的方法是在类之外定义结构,但这会使事情变得更加丑陋。
最佳答案
这是先有鸡还是先有蛋的情况。编译器需要查看声明的结构,以便实例化 Parent。
你可以试试这样的:
template <typename A, typename B>
class Parent
{
public:
Parent();
virtual ~Parent();
// ...
};
// CHILD
class ChildBase
{
public:
struct SomeStruct
{/*...*/};
struct AnotherStruct
{/*...*/};
};
class Child : public ChildBase, public Parent<ChildBase::SomeStruct, ChildBase::AnotherStruct>
{
public:
using ChildBase::SomeStruct;
using ChildBase::AnotherStruct;
Child();
~Child();
// ...
};
这是多重继承路线。或者,您可以将结构声明放在命名空间而不是基类中,这不会让它们位于全局命名空间中。
这两种方式都不是您想要的,但如果您想要 Child::SomeStruct 类型的语法,请不要污染全局命名空间并让类型在 Child 上可见。
关于c++ - 从模板类继承,类型在子类中声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33508693/