所以我有两个不同的结构,其中我将访问的所有属性都是相同的。我还有一个功能,谁的论点,我希望能够接受两者中的任何一个。示例:
typedef struct{
int whatnot = 14;
int thing[11];
} TH_CONFIG;
typedef struct{
int whatnot = 3;
int thing[5];
} TH_CONFIG_2;
*_CONFIG var;
void fun(*_CONFIG input)
{
input.whatnot = 5;
}
int main(){
fun(var);
}
我可能有一个暗示,我应该使用 void 作为我可以类型转换或其他什么的类型?但我的搜索只产生了关于函数指针、模板和 C# 的东西。
编辑:*_CONFIG 在句法上并不意味着正确,它表示我不知道在那里做什么,但它应该是 _CONFIG 类型
最佳答案
可能的解决方案。
- 只需为它们都使用一个长度为 11 的数组。您的操作系统真的用完了最后 6 个字节吗?
- 让它成为一个动态数组。
- 只用汇编写,你显然不关心 C 的高级性。
- 使用像 C++ 这样支持模板或多态性的语言。
只需传入您关心的
struct
的参数即可。void fun(int* whatnot) { *诸如此类= 5;
int 主要(){ 乐趣(&myStruct.whatnot); 返回 0;
将因素纳入准 OO 设计。
结构{ 诸如此类; } typedef 通用;
结构 TH_CONFIG_1 { 常见的; 内部事物[11]; };
结构 TH_CONFIG_2 { 常见的; 内部事物[5];
但如果你坚持...
void fun(void* input) {
( (int)(*input) ) = 5;
}
或者...
void fun(void* input) {
( (TH_CONFIG*) input)->whatnot = 5; // may have been a TH_CONFIG_2, but who cares?
}
注意:这不会通过任何 C 商店的代码审查。
关于C泛型类型作为函数参数输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15340229/