让我们定义一个结构解析器
:
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;
}
在某处定义了策略函数。
好的,所以我的兴趣是确定在编写单元测试时使用了哪种策略。知道如何实现吗?
我在 Internet 上看到了一些关于 C++ 11
中的 is_pointer
函数的内容,但我认为这对我没有帮助。
最佳答案
解析器是一个变量:
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();
关于c++ - 检查函数指针类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38607373/