假设我们有这样一个函数:
void WonderfulFunction(float a)
很明显,我们可以传递一个int
towonderful_function
并且 C 编译器会将这个提升int
到一个float
.
但是,用户定义的数据类型呢?假设我们使用一条typedef
语句为结构提供名称/别名。有什么方法可以定义提升规则、强制转换函数或构造函数,它们会自动将原语转换为 ADT(抽象数据类型)?我意识到这可以在 C++ 中完成,但这需要在 C 中。
我们希望以下代码能够正确编译:
// #include <niffty_promoter_castOperator_thing.h>
struct HappyStruct {
int happy_int;
};
typedef struct HappyStruct HappyStruct;
/* prototype */
void AnotherWonderfulFunction(HappyStruct hs)
int main( ) {
int a = 12345;
AnotherWonderfulFunction(a);
// A caster/promoter included in the
// header file specifies how to
// construct a HappyStruct from an int
return 0;
}
void AnotherWonderfulFunction(HappyStruct hs) {
// do stuff;
}