我希望创建许多具有相同参数的函数,例如:

const int add(const int a, const int b) {
    return (a + b);
}
decltype(add) subtract {
    return (a - b);
}
/* many more functions */

目的是使我能够一次轻松地更改参数的类型来更改所有功能。我知道这可以通过宏来实现:
#define INT_OPERATION(name) const int name (const int a, const int b)
INT_OPERATION(add) { return (a + b); }
INT_OPERATION(subtract) {return (a - b); }

但是,我不喜欢使用宏。有更安全的方法吗?

最佳答案

函数签名不能被typedef编码。仅函数的类型。所以说:

typedef int INT_OPERATION(int a, int b);

然后向前声明一个具有这种类型的函数:
INT_OPERATION Add;

,但在上为定义,您必须指定参数的函数,因此以下名称为无效
INT_OPERATION Add { /* No can do */ }

(将一组()放在Add之后,您将声明一个函数,该函数返回一个无效的C++普通函数)

在泛型类型上

使用通用编程工具时,相同的过程具有类似的局限性。您可以声明以下typedef:
template<typename T>
using INT_OPERATION = const T(T const, T const);

然后将其用于函数(转发)声明
INT_OPERATION<int> add;

int main() {
    std::cout << add(1, 2) << std::endl;
    return 0;
}

但是在定义它时,您必须要精打细算
const int add(int const a, int const b) {
    return a + b;
}

Demo

关于c++ - 复制功能签名,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24583561/

10-12 14:56
查看更多