c++ - 是否可以代理任何功能

标签 c++

我使用一个 (C) 库,其中的函数采用不同的参数,但在出现错误时总是返回一个大于零的整数:

int functionA(int param1, char param2); /* return an error code on failure, 0 otherwise */
int functionB(LIB_BOOLEAN param1);      /* return an error code on failure, 0 otherwise */
// ...

我想把它们都变成异常准备:

if (functionA(param1, param2) > 0)
{ throw std::runtime_error("Method failed"); }

是否可以编写一个模板来为所有方法做一次?

编辑: 我的想法是避免每次使用时都检查每个函数的结果。

最佳答案

你的意思是这样的吗?

template<typename F, typename... Args>
auto my_invoke(F &&f, Args&&... args) {
    if(std::forward<F>(f)(std::forward<Args>(args)...)) {
        throw std::runtime_error("Method failed");
    }
}

你可以这样调用它;

my_invoke(functionA, 0, 'c');

关于c++ - 是否可以代理任何功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41904526/

相关文章:

c++ - 这两个陈述有什么不同

c++ - QThreaded C++ 守护程序未正常关闭

c++ - OpenGL 试图平移对象,但相机也平移,我不需要

c# - 在 C++ 中使用 C# 接口(interface)或在 C# 中使用 C++ 接口(interface)

c++ - 如果 std::vector 元素 'commits suicide'(使用 delete this;)会发生什么?

c++ - 高级和低级编程语言之间的关系

c# - 进程间通信 - C# 和 C++。访问路径被拒绝

c++ - C++中从字符串中提取数字

c# - C++实践类似于C#的只读数据成员行为

c++ - 空字符串加一个整数?