2012-01-23 96 views
2

我有一个头文件,它定义了要通过C++ DLL边界传递的c样式结构。这个头文件和DLL可能会被C++,java和c应用程序使用。我想初始化这些结构,以允许用户指定参数的一个子集,其余的将被赋予默认值。初始化c样式结构

我正在考虑在头文件中创建一系列初始化函数,这些函数需要参考它们将初始化的结构以及可以设置的所有成员的参数。 “初始化”函数将使用重载(基于传入的结构引用)以确保调用正确的函数。我还计划使用默认参数来设置默认值。我想这些功能必须是gobal。

这是一个很好的方法吗?有更好的选择吗?感谢

+3

C不支持方法重载。您必须为C API使用不同的函数名称,否则使用相同的参数列表将单个函数后面的所有函数抽象出来。你也可以找到[这个问题](http://stackoverflow.com/questions/479207/function-overloading-in-c)有帮助。 –

+0

你可以在头文件中添加函数原型,但实际的函数最好放在源文件中。还要记住将函数声明为'extern“C”',这样C++不会破坏它们的名字。除此之外,这不是一个坏方法。 –

+0

@迈克尔,谢谢。 – pingu

回答

6

你可以添加一个返回默认初始化结构的功能:

struct abc 
{ 
    int a; 
    float b; 
    char c; 
}; 

abc GetDefaultAbc() 
{ 
    const abc def = { 1,2.0,3 }; 
    return def; 
};