我有多个彼此相似的函数 - 它们接受相同的参数,并返回相同的类型:
double mathFunction_1(const double *values, const size_t array_length);
Run Code Online (Sandbox Code Playgroud)
我已经使用了typedef'd指向那些函数的指针,因为我将它们存储为一个数组,以便在相同的数据上轻松使用它们,映射它们等:
typedef double (* MathFunction_ptr )(const double *, const size_t);
double proxy(MathFunction_ptr mathfun_ptr, const double *values, const size_t array_length);
Run Code Online (Sandbox Code Playgroud)
我想要实现的是与声明和定义函数类似的易用性,就像我已经使用指针一样.
因此,我正在考虑使用类似的typedef来让我更容易编写实际的函数.我尝试这样做:
// declaration
typedef double MathFunction (const double *values, const size_t array_length);
MathFunction mathFunction_2;
Run Code Online (Sandbox Code Playgroud)
以下方法部分起作用.它允许我在声明中"保存一些键击",但是必须完全输入定义.
double mathFunction_2(const double *values, const size_t array_length)
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
我通过搜索更多这个问题找到的是:函数原型typedef可以用在函数定义中吗?
然而,它没有提供很多替代方案,只是重申我根据标准禁止在我的其他实验中尝试做的事情.它提供的唯一选择是使用
#define FUNCTION(name) double name(const double* values, size_t array_length)
Run Code Online (Sandbox Code Playgroud)
这听起来很笨(因为我对使用预处理器持谨慎态度和怀疑态度).
我正在尝试做什么的替代方案是什么?
我试过的另外两种方法不起作用(而且,正如我刚才所读,根据C标准6.9.1禁止和绝对错误):
1.这种方法不起作用,因为这意味着我告诉它定义一个变量mathFunction_2(我相信变量被视为一个指针,虽然我还不太了解它),就像一个函数:
MathFunction mathFunction_2
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
2.这种方法不起作用,因为它意味着我告诉它创建一个返回函数的函数(在C语言中不可接受):
MathFunction mathFunction_2() …
Run Code Online (Sandbox Code Playgroud)