C 在施工中定义的容器
C++ Container defined in construction
我可能以错误的方式问这个问题,但我想在对象实例化时定义一个成员容器。
namespace GUI {
class MenuNode {
template <typename TMenuItem>
struct MenuItem{
TMenuItem *text;
};
MenuItem<unknown> t;//The member where I want the container
//to be defined upon construction
public:
std::vector<MenuNode*> forward;
MenuNode* parent;
MenuNode();
~MenuNode();
};
}
我可以避免此问题的一种方法是使Menunode本身成为模板类,但是我将带有所需容器(链接列表样式)的前进和向后指针,我也不知道他们的容器类型!
namespace GUI {
template<class MenuItem>
class MenuNode {
MenuItem t;
public:
std::vector<MenuNode<unknown>*> forward; //Here I wouldn't know
//what the container will
//even be!
MenuNode<unknown>* parent; //same with this member
MenuNode();
~MenuNode();
};
}
因此,一个替代方案是具有指向地址的指针类型,而不论会员的容器
namespace GUI {
template<class MenuItem>
class MenuNode {
MenuItem t;
public:
std::vector<void*> forward;
void* parent;
MenuNode();
~MenuNode();
};
}
但是无效指针的问题是我不知道如何确定对象所容纳哪种类型的容器!另外,我从未使用过无效的指针!
如果解决方案是要使用void指针,如果我创建具有非常相似功能的menuitem(同一名称),我可以通过将其调用到void指针。
创建一个抽象基类。这是一个草图:
class MenuNodeBase {
std::vector<MenuNodeBase *> forward;
MenuNodeBase *parent;
virtual ~MenuNodeBase() = default;
};
template<class T>
class MenuNode : public MenuNodeBase {
MenuItem<T> t;
};
您可以使用虚拟功能或dynamic_cast
来访问混凝土类的功能。
相关文章:
- 用户定义函数中的指针和输入
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- 如何在自定义类中启用'auto loops'?
- Arduino:在 loop() 和自定义函数中运行相同的代码时出现问题
- 在自定义程序中使用本机 Windows 自然顺序排序
- 如何在C++中返回自定义类中的分段错误?
- 在 C++ 的自定义运算符中删除与删除[](不同于常见的删除与删除[]问题)
- 如何使用运算符>>在自定义字符串中输入多个单词?
- 在priority_queue的自定义类中重载比较运算符
- 自定义容器中的括号运算符中的恒常性
- 自定义异常中的用户定义的空构造函数,具有多个继承和抽象基类
- 在自定义 STUCT 中存储值会产生编译器错误 [C++]
- 为什么不能在C++中重新定义类中的类型名称?
- 是否应该定义 #if 中使用的宏?
- 定义结构中没有默认构造函数的类
- 自定义类中的移动与复制性能
- 编译器如何定义type_traits中的类?
- 施工中的自我参考
- 自定义异常中的消息已损坏
- C 在施工中定义的容器