微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

用十进制打印的C ++模板

我正在做一个通用的logging器类,我打印任何传递到一个文件

Logger::Instance()->write('c'); Logger::Instance()->write("this"); Logger::Instance()->write(5);

不过,我遇到了一个问题,我有

char c = 't'; Logger::Instance()->write(c);

打印十进制而不是ascii:

116

string工作正常,但字符是唯一的问题。

如何从麦克风捕获audio以通过套接字发送?

端口Visual Studio C ++到Linux

创build一个Windows安装程序

将Perl正则expression式转换为等价的ECMAScript正则expression式

使用libsodium构build一个简单的项目

我的代码

class Logger { public: static Logger* Instance(); bool open(string filename); template<typename T> void write(T data) { file << data; } bool close();

如果我做一个字符特定的打印function:

void write(char data) { file << data;

它会打印字符。 不知道这里发生了什么事。

编辑1:

只是一个总结..那么为什么这打印数字:

void write(T data) { file << data; }

而这个打印正确的ascii:

void writeChar(char data) { file << data; }

???

编辑2:

这是我的代码

logger.h logger.cpp

使用这个类,只是去:

char c = 't'; Logger::Instance()->write(t); Logger::Instance()->writeChar(t);

编辑3:

好的..这是最后一个文件

[keyboardhook.cpp][3] [keyboardhook.h][4] [main.cpp][5] [3]: http://pastebin.com/VEav4kfn [4]: http://pastebin.com/yPwF17yg [5]: http://pastebin.com/JwHz2NBe

看看这里:

if(isdigit(c)) { Logger::Instance()->write((char) c); Logger::Instance()->writeChar(c); } else if(isalpha(c)) { if(!shift) Logger::Instance()->writeChar(tolower((char) c)); else Logger::Instance()->writeChar((char) c);

Stackoverflow不断将我的文字标记为“代码”,并保存时给我的问题..抱歉的等待。

LoadLibrary()的相对地址为dll

在Windows中build立Luabind

解决无法parsing的外部符号CSourceSeeking :: CSourceSeeking(…),尽pipe与正确的库链接

CMake发布步骤:根据visual studioconfiguration复制多个文件

Visual Studio中的“win32 project”名称与x86或x64平台的关系如何?

我试过以下,它在Visual C ++ 2010中正常工作(如我所料):

#include <iostream> struct Logger { template <typename T> void write(T data) { std::cout << data; } }; int main() { Logger *log = new Logger; char c = 't'; log->write(c); delete log; }

也许你有一些自定义的operator<<是为你造成这种行为吗? 你可以发布sscce吗?

编辑:

为了将来的参考,这里是什么将构成您的问题的SSCCE(根据您的完整的代码):

#include <iostream> struct Logger { template <typename T> void write(T data) { std::cout << data; } }; int main() { Logger *log = new Logger; char c = 't'; log->write(tolower(c)); delete log; }

关键问题是tolower的签名是int tolower(int c) ,也就是说,它返回一个整数,而不是一个字符。 因此, write<int>被调用,而不是write<char> 。

请记住sscce有多重要! 你的问题没有包含导致问题的非常重要的代码

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐