2016-07-27 61 views
1

让我们定义一个结构parser检查函数指针类型

struct parser { 
    int (*buffer_push_strategy)(); 
    int (*escape_buffer_push_strategy)(); 
    int (*do_callback_strategy)(); 
}; 

我有一个初始化函数:

int parser_init() {  
    if (some_condition) { 
     parser->buffer_push_strategy = buffer_push_strategy1; 
     parser->escape_buffer_push_strategy = escape_buffer_push_strategy1; 
     parser->do_callback_strategy = do_callback_strategy1; 
    } 
    else { 
     parser->buffer_push_strategy = buffer_push_strategy2; 
     parser->escape_buffer_push_strategy = escape_buffer_push_strategy2; 
     parser->do_callback_strategy = do_callback_strategy2; 
    } 
return 0; 
} 

在策略函数定义的地方。好吧,我的兴趣在于确定在编写单元测试时使用了哪种策略。任何想法如何实现?

我在互联网上看到is_pointer函数C++ 11,但我不认为这会对我有帮助。

+0

解析器是一个类型,而不是一个变量。在第一段代码中删除typedef。 – EFenix

+0

@AntonioGarrido对不起 – astonished

+0

我不确定这个问题...你在找什么:'int strategy =(parser-> buffer_push_strategy == buffer_push_strategy1)? 1:2;' – EFenix

回答

0

解析器是一个变量:

struct parserT { 
    int (*buffer_push_strategy)(); 
    int (*escape_buffer_push_strategy)(); 
    int (*do_callback_strategy)(); 
} parser; 

如果你想知道哪个策略是,你可以使用:

int strategy= (parser->buffer_push_strategy == buffer_push_strategy1) ? 1 : 2; 

也许,你更喜欢存储策略号:

int parser_init() {  
    if (some_condition) { 
     parser->buffer_push_strategy = buffer_push_strategy1; 
     parser->escape_buffer_push_strategy = escape_buffer_push_strategy1; 
     parser->do_callback_strategy = do_callback_strategy1; 
     return 1; 
    } 
    else { 
     parser->buffer_push_strategy = buffer_push_strategy2; 
     parser->escape_buffer_push_strategy = escape_buffer_push_strategy2; 
     parser->do_callback_strategy = do_callback_strategy2; 
     return 2; 
    } 
} 

然后,你可以初始化解析器为:

const int STRATEGY= parser_init(); 
+0

太好了,谢谢! – astonished