我正在玩网络服务示例。我有传递给各种函数的错误变量。
WS_ERROR* error = NULL;
我想知道这个错误是如何构建的。我在F12
上按WS_ERROR
,现在我WebServices.h
有定义:
typedef struct _WS_ERROR WS_ERROR;
好吧,WS_ERROR
是结构_WS_ERROR
。按_WS_ERROR
上的F12
更深入_WS_ERROR
并停止!我无法深入_WS_ERROR
定义。为什么?那么,如何定义_WS_ERROR
?
答案 0 :(得分:0)
因为它是一个opaque type,即程序员不希望你把它放进去(无论出于何种原因)。
伪代码示例:想象一家公司有一个他们希望您通过公共API使用的库,但是不要让您知道他们如何处理引擎盖下的东西,他们只是手你是一个库文件和一个头文件来链接它,例如
Header.h
// Public header to link against something
#pragma once
typedef struct FakeStruct* FakeStructPtr; // Opaque type
DLL_PUBLIC void public_api_function(FakeStructPtr obj);
您将使用API参考中所述的FakeStructPtr
,并将FakeStruct
个对象(由其他API函数创建)传递给某些public_api_function
。
公司内部可能会做类似
的事情// Internals
#include "Header.h"
struct RealDataType {
int realdata1;
float realdata2;
// whatever..
};
void public_api_function(FakeStructPtr obj) {
RealDataType* ptr = reinterpret_cast<RealDataType*>(obj); // Cast to real data
// use the real data through RealDataType..
}
并确保您不会最终查看其内部数据类型(除非您使用了某些反转或有人将错误的调试版本公开)。