我正在创建事件系统。它基于boost :: signals。为了使工作更容易,我使用typedef作为函数签名。
在我需要创建一些新的事件trought事件的系统方法之前,一切都很好。我必须在模板函数的给定类型上动态创建 typedef 。问题是typedef的名称。
我会有一些伪代码:
template<typename EventType>
void create(const string &signalName)
{
typedef EventType signalName;
// ...
}
是否可以使用一些传递的字符串或数据或其他东西来制作这样的typedef(它们的名字)?我不想让用户关心这个。
UPD :所以,我有一些函数签名的typedef列表 - 事件。例如,我有一些用于连接插槽的模板功能。我不想每次都强迫用户再次输入签名(用户是将使用事件系统的程序员)。所以我只是将特殊命名空间中的typedef用于模板参数。
答案 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);
}