C++11中的别名结构
Aliasing Structs in C++11
我正在编写一个涉及事件和回调的C++11程序。我有一个名为Event的基类,它是由具体的事件类派生的。
template <typename EventArgs>
class Event {
public:
using EventHandler = std::function<void(EventArgs)>;
void operator +=(EventHandler handlerDelegate);
void fire(EventArgs e);
private:
std::vector<EventHandler> subscribers;
};
struct TouchEventArgs { int x, int y }
struct TouchEvent : public Event<TouchEventArgs> { }
...
我想知道这样的事情是否可能:
template <typename EventArgs>
using event = struct : public Event<EventName> { };
这样我就可以声明类似的事件
event<TouchEventArgs> TouchEvent;
您可以维护事件类型与其参数类型之间的编译时映射:
namespace detail {
//primary template
template <typename EventArgs>
struct event;
//the event for TouchEventArgs is TouchEvent
template<> struct event<TouchEventArgs>
{ using type = TouchEvent; };
}
//helper template
template <typename EventArgs>
using event = typename detail::event<EventArgs>::type;
现在我们可以像您想要的那样声明一个变量(假设名称冲突是一个意外):
event<TouchEventArgs> touch_event; //decltype(TouchEvent) is TouchEvent
相关文章:
- 如何循环打印顶点结构
- 通过方法访问结构
- 部分定义/别名模板模板参数
- 使用不带参数的函数访问结构元素
- 预处理器:插入结构名称中的前一个行号
- 包含可变参数包的第一个可转换类型的别名的结构
- 将结构别名为其第一个成员是否严格违反别名
- typedef(别名)与结构性能
- 命名结构与未命名结构的类型别名
- 如何定义别名以通过结构访问枚举类成员
- C++对类/结构中定义的公共别名(typdef/using)的循环依赖
- 使用并集的简单结构中的成员变量别名
- C 使用模板为结构定义别名
- 使用别名引用匿名结构会导致错误
- 通过C强制转换访问结构的第一个字段是否违反了严格的别名
- VC++2013 中嵌套可变参数模板化结构的别名
- 在结构体中别名成员变量是否接受匿名联合?
- 用于声明具有别名的类层次结构的Cython语法
- C++11中的别名结构
- 结构体的无符号字符别名