让我们定义一个结构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 :(得分:0)
答案 1 :(得分: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();