[strongswan] strongswan METHOD宏
使用METHOD宏的函数定义:
METHOD(message_t, get_message_id, uint32_t, private_message_t *this) { return this->message_id; }
METHOD宏的定义:
/** * Method declaration/definition macro, providing private and public interface. * * Defines a method name with this as first parameter and a return value ret, * and an alias for this method with a _ prefix, having the this argument * safely casted to the public interface iface. * _name is provided a function pointer, but will get optimized out by GCC. */ #define METHOD(iface, name, ret, this, ...) \ static ret name(union {iface *_public; this;} \ __attribute__((transparent_union)), ##__VA_ARGS__); \ static typeof(name) *_##name = (typeof(name)*)name; \ static ret name(this, ##__VA_ARGS__)
将METHOD宏展开后的定义:
static uint32_t get_message_id(union {message_t *_public; private_message_t *this;} __attribute__((transparent_union))); static typeof(get_message_id)* _get_message_id = (typeof(get_message_id)*)get_message_id; static uint32_t get_message_id(private_message_t *this)
关于transparent_union的定义:
http://nanjingabcdefg.is-programmer.com/categories/5966/posts