我有一个简单的结构,它在我正在处理的应用程序中包含GUI控件。结构的定义如下
template<class T>
struct guiControl
{
T minValue
T defaultValue
...
}在我的应用程序中,每个控件都由唯一的整数ID标识。我想使用map<int, guiControl>访问结构,但不允许这样做:
非专用类模板不能用作模板参数的模板参数。使用类模板需要模板参数列表。
好的,这对我来说是有意义的-编译器需要确切地知道映射的值类型需要多少空间。但是,对于我来说,还有其他方法来近似这种行为吗--最好不要进入高潮或者更复杂的阶级继承制度?
发布于 2011-08-24 15:21:34
在一个地图中访问您的控件是没有意义的,因为它们是不同类型的,这意味着您不能对它们执行相同的方法等等。
您可以做的是定义一个包含每个控件应该拥有的元素的通用类,然后从该类派生特殊控件:
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),甚至可以将它们转换回派生类型,但是您必须知道它们是哪种类型。
https://stackoverflow.com/questions/7177425
复制相似问题