c++ - 检查函数指针类型

标签 c++ c pointers

让我们定义一个结构解析器:

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/

相关文章:

c - 指针无法正确打印值

c++ - 使用 gdbus-codegen 生成的代码时如何堵塞内存泄漏?

c++ - 比较 const 和非常量指针?

c - 为什么当我将一个字符串字面量赋值给一个char变量时打印出字符d?

c - 在 C 中使用指针对数组进行排序

c++ - 在指向 C++ 中的缓冲区(字符串 "")的空指针上使用 sizeof() 以获得 BYTES 的大小?

C++ 20 概念/Requires 子句

c++ - 生成唯一编号

c++ - 如何使用线程处理标准容器?

c++ - 将 -M 标志添加到 g++ 会导致文件格式无法识别错误