美文网首页C/C++
用模板检查函数返回值

用模板检查函数返回值

作者: cx7 | 来源:发表于2019-04-18 21:18 被阅读0次

调试OpenGL程序时 需要在每个gl api调用后使用glGetError检查状态机错误

GLuint tex;
glGenTextures(1, &tex);
if (glGetError()) {
    LOGE("gl err : file %s line %d errno %d", __FILE__, __LINE__, glGetError());
    abort();
}

编码时每个调用后都加入这样一段代码会让代码变得繁琐
可以封装glGenTextures

void CX_glGenTextures(GLsizei n, GLuint* textures) {
    glGenTextures(n, textures);
    if (glGetError()) {
        LOGE("gl err : file %s line %d errno %d", __FILE__, __LINE__, glGetError());
        abort();
    }
}

}

这么做的缺点在于要把所有的gl api都封装一次 太过繁琐
针对这种情况,可以用模板来实现

template  <typename Fun, typename... Args>
void GLExecWithoutRetVal(Fun *fun, Args... args) {
    (*fun)(args...);
    if (glGetError()) {
        LOGE("gl err : file %s line %d errno %d", __FILE__, __LINE__, glGetError());
        abort();
    }
}

template  <typename Fun, typename Ret, typename... Args>
void GLExecWithRetVal(Fun *fun, Ret *ret, Args... args) {
    *ret = (*fun)(args...);
    if (glGetError()) {
        LOGE("gl err : file %s line %d errno %d", __FILE__, __LINE__, glGetError());
        abort();
    }
}

调用 : 
GLuint tex;
GLExecWithoutRetVal(&glGenTextures, 1, &tex);//无返回值调用
GLuint program;
GLExecWithRetVal(&glCreateProgram, &program);//带返回值调用

相关文章

  • 用模板检查函数返回值

    调试OpenGL程序时 需要在每个gl api调用后使用glGetError检查状态机错误 编码时每个调用后都加入...

  • STL与泛型编程(geekband)

    1.定义模板 1.1函数模板template<模板参数列表>返回值 函数名(形参列表) 实例化函数模板通过形参列表...

  • Python函数

    函数定义: 如果有多个返回值,返回值是一个tuple 空函数: 数据检查: isinstance()方法做数据检查...

  • 函数模板和类模板--GeekBand

    一 函数模板函数模板,实际上是建立一个通用函数,其返回值类型和形参类型不具体指定,用一个虚拟的类型来代替。这个通用...

  • C++学习第18课,高级编程:函数模板

    1 函数模板的定义 template<类型参数表> 返回值 函数名(数据参数表) { 函数模板定义体; } 例...

  • 学习typescript -Type Compatibility

    赋值兼容检查 函数传参类型检查 函数赋值参数兼容 函数赋值返回值兼容 枚举 类 泛型 自行回顾 赋值兼容检查 函数...

  • 2018-11-21python中的函数

    调用含有返回值的函数时,需要提供一个变量,用于储存返回的值 用if可以检查条件

  • golang 基础(10)函数返回值

    返回值 在 go 语言中函数支持多个返回值 我们也可以给函数返回值打上标签 q, r 我们可以用两个变量来接受函数...

  • golang 基础(5)函数的返回值

    在 go 语言中函数支持多个返回值 我们也可以给函数返回值打上标签 q, r 我们可以用两个变量来接受函数返回值 ...

  • 自定义函数

    无返回值函数 有返回值函数 ** 同时改变函数内外的参数值,可以用inout关键字,同时调用函数的时候给参数加上前...

网友评论

    本文标题:用模板检查函数返回值

    本文链接:https://www.haomeiwen.com/subject/fcztgqtx.html