gpt4 book ai didi

c++ - 复制函数签名

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:27:22 24 4
gpt4 key购买 nike

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

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com