[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

 

posted on 2018-12-17 14:27  toong  阅读(1007)  评论(2编辑  收藏  举报