[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

原文地址:https://www.cnblogs.com/hugetong/p/10131331.html