我将违背常规并建议错误代码和异常,但这只是因为您正在创建一个库。既然您说您正在创建一个库,我猜想该库将可供您无法控制的人编写的代码使用。所以,让你的代码对不同的编译器甚至语言都友好是一件好事。
因此,我将编写一个 C++ 异常库并提供详细说明您的异常类的头文件。我还将编写一个为用户处理异常的 C 接口。现在用户可以链接到哪个接口是合适的:
#ifdef __cplusplus__
void generate_report(const std::string& rep_number, ostream& output);
extern "C"
#endif
int generate_report(const char* rep_number, const char* outputfilename,
int* error_code, char* error_text, int max_error_text_len);
C 实现调用 C++ 实现:
extern "C"
int generate_report(const char* rep_number, const char* outputfilename,
int* error_code, char* error_text, int max_error_text_len)
{
ofstream os;
try {
os.open(outputfilename, IOS_WRITE);
generate_report(rep_number, os);
os.close();
return TRUE;
} catch (base_exception& e) {
os.close();
if (error_code) *error_code = e.error_code();
if (error_text) strncpy(error_text, e.str(), max_error_text_len);
return FALSE;
}
}