我的库中有一个不透明类型定义为:
typedef struct MyOpaqueType* MyType; // easier to type for client code
我无法使用 typedef 传递指向常量的指针,因此某些函数如下所示:
void UsePointerToConst ( const struct MyOpaqueType * )
代替:
void UserPointerToConst( const MyType ) // can't use, is really constant pointer
所以,鉴于此,我有两个问题:
参数列表中的 struct 关键字是否仅在 C 中才需要?
有一个更好的方法吗?我应该创建一个typedef,例如:
typedef const struct MyOpaqueType* ConstantMyType; ?
最佳答案
是的。请参阅 Jens Gustedt 的回答。
只是 typedef
结构,而不是指针。这更好,因为
typedef
而不是每个 { MyOpaqueType
, MyOpaqueType *
, MyOpaqueType const *
, MyOpaqueType *const
和 MyOpaqueType const *const
} 以及所有涉及 restrict
的变体(在 C++ 中不存在),FILE *
)。 也没有危险;当有人忘记
*
时,他们会收到编译器错误。关于c++ - 函数参数中的 struct 关键字和常量正确性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6526225/