【发布时间】:2017-09-25 19:00:57
【问题描述】:
我正在编写一些逻辑来做一些日志记录,有一堆 C++ 与 C 混合,因为这个库的大部分内容都是为了 p/Invoked。我已经设法编写了一个记录消息和可选参数的函数:
void writeToLog(char* message, char* arg) {
std::ofstream file;
file.open(fullpath, std::ios::in | std::ios::app);
if (file.is_open()) {
std::string fullMessage = getCurrentDateTime();
fullMessage.append(message);
if (arg != 0)
fullMessage.append(arg);
fullMessage.append("\n");
const char* pcMessage = fullMessage.c_str();
file << pcMessage;
std::cout << pcMessage;
}
file.close();
}
但是它只需要 char* 作为 args,但我想将它们与 int 和 long 一起使用......我已经尝试过:
void writeToLog(char* message, void* arg) {
std::ofstream file;
file.open(fullpath, std::ios::in | std::ios::app);
if (file.is_open()) {
std::string fullMessage = getCurrentDateTime();
fullMessage.append(message);
if (arg != 0)
fullMessage.append((char*)&arg);
fullMessage.append("\n");
const char* pcMessage = fullMessage.c_str();
file << pcMessage;
std::cout << pcMessage;
}
file.close();
}
但无论数据类型如何,它都会打印/写入乱码。请指出您认为合适的任何其他错误,我在 C/C++ 方面有点菜鸟。
【问题讨论】:
-
使用模板。这就是他们的目的。
-
就像我说的,我是一个 C++ 菜鸟,我不知道模板是如何工作的,但我会看看
-
听起来你可以使用 good C++ book 然后
-
@NathanOliver 如果该函数是 P/Invoke 的,那么模板实际上并不是一个好的答案。它们只能由 C++ 代码实例化,没有包装器就无法从 C# 调用它们。
标签: c++ casting void-pointers