我的需求是,一个函数传递一个结构体进去,然后自动推导出返回值和返回值类型。
一开始我是这么写的,但是我发现,我的槽并没有调用啊。然后我就怀疑是这个T的问题。
从源码慢慢一步步找过去。
可以发现,这是一个宏替换
这是一个模版类,实际上最后传入的是一个const char*类型。
那么问题就来了。
宏在 预编译 阶段处理,模板在编译阶段处理
那么其实在我这个宏展开的时候,我这个T已经无法被编译器正确识别了。那么也就无法将他转换成一个字符串了。
即便修改成这样也是不行的的,因为#也是一个宏,宏比模版先展开。
也就说我必须提前推导出这个变量的类型才行。于是我就考虑再写一个模版,用于推导出变量类型名称
使用typeid推导出类型。
这样最后就能正确推导了,经过测试,成功触发槽了。
总结:Qt有些宏不能乱用,宏替换后,使用模版会出现错误