C ++理解typedef

时间:2016-10-13 20:13:32

标签: c++ typedef

我做了一些研究,但我无法理解typedef是什么。

我找到了这个例子:

typedef HINSTANCE(*fpLoadLibrary)(char*)

有人可以解释typedef在这里做了什么,还有什么意思将括号中的值放在

3 个答案:

答案 0 :(得分:3)

如果您使用使用声明

,情况会更清楚
using fpLoadLibrary = HINSTANCE(*)(char*);

这是typedef的C ++ 11 替代(事实上,标准说 - 也可以通过别名声明引入typedef-name )。
正如您现在所看到的,fpLoadLibrary是指向函数类型HINSTANCE(char*)的类型指针的别名
括号中的类型只不过是函数类型参数的预期类型 您的代码段中的typedef表示完全相同,即使(我的意见)更难阅读。

现在假设你有一个这样的函数:

HINSTANCE f(char*) {}

您可以使用上面介绍的类型:

fpLoadLibrary fp = &f;

然后,您也可以通过f调用fp

fp(my_char_ptr);

作为一个例子,当您想要存储一个函数指针并从一组具有相同签名的可用函数中选择正确的函数时,它可能会有所帮助。

答案 1 :(得分:0)

对于具有签名

的函数的函数指针,它是typedef
HINSTANCE fn (char*);

并使用名称fpLoadLibrary

您可以像

一样使用它
fpLoadLibrary fptr = fn; // << from above

答案 2 :(得分:0)

typedef HINSTANCE(*fpLoadLibrary)(char*)

fpLoadLibrary声明为类型,该类型是指向以char*作为输入并返回HINSTANCE的函数的指针。

使用更简单的typedef类比。

对于int

int ip;             // Declares a variable.
typedef int aType;  // Declares type. aType is an alias for int

对于函数指针,

// Declares a variable.
// ftpr is a pointer to a function that takes char*
// as argument and returns a HINSTANCE.
HINSTANCE (*fptr)(char*);

// Declares a type.
// fpLoadLibrary is an alias for the type "pointer to function that takes
// a char* as argument and returns a HINSTANCE. 
typedef HINSTANCE (*fpLoadLibrary)(char*);