首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >变T型templateStruct<T>容器

变T型templateStruct<T>容器
EN

Stack Overflow用户
提问于 2011-08-24 14:44:54
回答 1查看 138关注 0票数 0

我有一个简单的结构,它在我正在处理的应用程序中包含GUI控件。结构的定义如下

代码语言:javascript
复制
template<class T>
struct guiControl
{
    T minValue
    T defaultValue
    ...
}

在我的应用程序中,每个控件都由唯一的整数ID标识。我想使用map<int, guiControl>访问结构,但不允许这样做:

非专用类模板不能用作模板参数的模板参数。使用类模板需要模板参数列表。

好的,这对我来说是有意义的-编译器需要确切地知道映射的值类型需要多少空间。但是,对于我来说,还有其他方法来近似这种行为吗--最好不要进入高潮或者更复杂的阶级继承制度?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-08-24 15:21:34

在一个地图中访问您的控件是没有意义的,因为它们是不同类型的,这意味着您不能对它们执行相同的方法等等。

您可以做的是定义一个包含每个控件应该拥有的元素的通用类,然后从该类派生特殊控件:

代码语言:javascript
复制
template<class T>
class guiControl
{
  T minValue;
  T defaultValue;
  /* ... */
}

控件示例:

代码语言:javascript
复制
class Button : public guiControl<int>
{
   /* ... */
   int get_id() { return id; }
}

然后,当您将对象指针转换为基类的类型时,仍然可以生成指向对象的id和指针的映射:

代码语言:javascript
复制
map<int, guiControl<int>* > controls;
Button button;
controls[button.get_id()] = dynamic_cast<guiContorl<int>*>(&button);

现在,您可以通过id访问控件的guiControl成员(如minValue),甚至可以将它们转换回派生类型,但是您必须知道它们是哪种类型。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7177425

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档