<T> 具有不同 T 的模板结构的容器
Container of templateStruct<T> with varying T
我有一个简单的结构体,其中包含我正在开发的应用程序中的GUI控件。结构体的定义如下
template<class T>
struct guiControl
{
T minValue
T defaultValue
...
}
每个控件在我的应用程序中由一个唯一的整数ID标识。我想访问具有map<int, guiControl>
的结构体,但这是不允许的:
非特化类模板不能用作模板形参的模板实参…使用类模板需要模板实参列表。
好的,这对我来说是有意义的——编译器需要确切地知道映射的值类型需要多少空间。但是,是否有其他方法可以近似这种行为-最好不使用Boost或更复杂的类层次结构?
在一个地图中访问控件是没有意义的,因为它们是不同类型的,这意味着你不能对它们执行相同的方法等等…
你能做的就是定义一个通用类,其中包含每个控件应该具有的元素,然后从该类派生特殊控件:
template<class T>
class guiControl
{
T minValue;
T defaultValue;
/* ... */
}
控件示例:
class Button : public guiControl<int>
{
/* ... */
int get_id() { return id; }
}
当你将对象指针强制转换为基类的类型时,你仍然可以制作一个id和指向对象指针的映射:
map<int, guiControl<int>* > controls;
Button button;
controls[button.get_id()] = dynamic_cast<guiContorl<int>*>(&button);
现在您可以通过id访问控件的guiControl
成员(如minValue
),甚至将它们转换回它们的派生类型,但随后您必须知道它们是哪种类型。
相关文章:
- 如何循环打印顶点结构
- 通过方法访问结构
- 使用不带参数的函数访问结构元素
- 预处理器:插入结构名称中的前一个行号
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 孤立代码块在结构中引发异常
- 有什么方法可以遍历结构吗
- 如何在 C# 中映射双 C 结构指针?
- 如何在C++中使用结构生成映射
- 无法将结构注册为增强几何体3D点
- 多成员Constexpr结构初始化
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- C++将文本文件中的数据读取到结构数组中
- 如何重构类层次结构以避免菱形问题
- 如何在C++中序列化结构数据
- std::vector的包装器,使数组的结构看起来像结构的数组
- 没有为自己的结构调用列表推回方法
- 奇怪的结构&GCC&clang(void*返回类型)
- 呼叫运营商<<临时
- C :对矢量进行排序&lt; struct&gt;(结构有2个整数)基于结构的整数之一