有没有一种方法可以使用typedef中的参数名称
Is There a way to use the Parameter Names from a typedef
给定一个typedef
,它定义了一个函数指针,参数名称如下:
typedef void(*FOO)(const int arg);
有没有一种方法可以让我使用这个函数指针来定义函数的签名?显然,这是行不通的,但我想以某种方式使用typedef
来指定具有相应类型的函数签名:
FOO foo {
cout << arg << endl;
}
再说一遍,我知道这不起作用,而且语法不好。它只会给出错误:
错误:未在此作用域中声明
arg
您试图做的事情不会奏效。FOO
是void(*)(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);
}
函数指针的定义与声明无关,也与函数的定义无关,因此答案是否定的。
您实际上可以做到这一点。您可以通过将自动lambda分配给类型来滥用lambda来克隆函数。缺点是您无法访问参数名称,而必须通过索引访问参数。
https://github.com/stevemk14ebr/PolyHook_2_0/blob/350f6723f0c12b93085273fc4a5208aaa36bf41a/polyhook2/IHook.hpp#L67-L150
这是一个用法示例https://github.com/stevemk14ebr/PolyHook_2_0/blob/350f6723f0c12b93085273fc4a5208aaa36bf41a/UnitTests/windows/TestDetourx64.cpp#L22-L41
相关文章:
- 如何将成员函数作为回调参数传递给需要"typedef-ed"自由函数指针的函数?
- typedef名称与可变模板参数名称一致时出现GCC错误
- 如何对绑定的成员方法进行typedef,然后将该类型用作模板参数
- 有没有一种方法可以使用typedef中的参数名称
- C++:显式调用模板参数的 typedef 的析构函数
- 如何在 C++ 中将 typedef 与类初始值设定项参数一起使用?
- 指向具有 2 个参数的 WINAPI 函数的 Typedef 指针
- 如何使用函数签名的 typedef 作为 std::function 的类型参数
- 如何在 C/C++ 中将 typedef 函数作为参数传递
- 如何从对象内部的 typedef 获取模板参数类型
- C 迭代器从Typedef std :: Map作为模板参数声明
- 将"typedef char IPString[17]"作为参数传递给函数
- Swig 简单类型 typedef 参数
- 如何将方法指针声明为Typedef方法参数
- c++检查模板参数的嵌套typedef以获取其标量基类型
- 以模板类型为参数的模板的typedef
- 如何用模板参数对函数指针进行typedef
- 使用模板参数的typedef不适用于g++
- 推导 typedef'd 函数指针的模板参数
- C++:使用"typedef"定义的类作为参数进行传递