动态创建typedef

时间:2010-06-18 22:29:30

标签: c++ dynamic typedef

我正在创建事件系统。它基于boost :: signals。为了使工作更容易,我使用typedef作为函数签名。

在我需要创建一些新的事件trought事件的系统方法之前,一切都很好。我必须在模板函数的给定类型上动态创建 typedef 。问题是typedef的名称。

我会有一些伪代码:

template<typename EventType>
void create(const string &signalName)
{
   typedef EventType signalName;
   // ...
}

是否可以使用一些传递的字符串或数据或其他东西来制作这样的typedef(它们的名字)?我不想让用户关心这个。


UPD :所以,我有一些函数签名的typedef列表 - 事件。例如,我有一些用于连接插槽的模板功能。我不想每次都强迫用户再次输入签名(用户是将使用事件系统的程序员)。所以我只是将特殊命名空间中的typedef用于模板参数。

3 个答案:

答案 0 :(得分:4)

typedef仅在编译期间有用。据我所知,它只是一种类型的别名。

答案 1 :(得分:3)

根据定义,模板参数是编译时实体。据我所知,在程序执行期间,您无法动态创建模板类。

答案 2 :(得分:1)

在这种情况下,我不会选择typedef。如果要生成多种类型的事件并动态创建它们,可以使用包含事件类型信息的简单类。当您有事件时,将其链接到之前创建的事件类型。

这样的事情:

class EventType
{
  private:
    string type;

  EventType(string type);
};

class Event
{
  private:
    string event_name;
    EventType *event_type;

  Event(string event_name, EventType event_type);
};

...

void create(const string &signalName)
{
  EventType *event_type = new EventType("type_x");
  Event *event = new Event("event_x", event_type);
}