有没有一种方法可以使用来自typedef的参数名称

时间:2018-07-18 15:34:15

标签: c++ parameters arguments function-pointers typedef

因此,给定一个typedef来定义具有如下参数名称的函数指针:

typedef void(*FOO)(const int arg);

有没有一种方法可以仅使用此函数指针来定义函数的签名?显然这是行不通的,但我想以某种方式使用typedef来指定具有相应类型的函数签名:

FOO foo {
    cout << arg << endl;
}

同样,我知道这行不通,并且语法错误。它只会给出错误:

  

错误:在此范围内未声明arg

2 个答案:

答案 0 :(得分:2)

您尝试执行的操作将不起作用。 FOOvoid(*)(const int)的别名。所以

FOO foo {
    cout << arg << endl;
}

成为

void(*)(const int) foo {
    cout << arg << endl;
}   

那是行不通的。但是,您可以做的是定义一个带有名称的宏,并使用该宏标记出函数签名。看起来像

#define MAKE_FUNCTION(NAME) void NAME(const int arg)

MAKE_FUNCTION(foo){ std::cout << arg * 5 << "\n"; }

MAKE_FUNCTION(bar){ std::cout << arg * 10 << "\n"; }

int main()
{
    foo(1);
    bar(2);
}

答案 1 :(得分:1)

函数指针的定义与声明或函数的定义均无关,因此答案是否定的。