c++ - 在模板中显示参数类型
问题描述
我正在努力解决参考崩溃问题(https://www.amazon.com/Effective-Modern-Specific-Ways-Improve/dp/1491903996上的第 28 项),并想尝试给不同的东西喂食一个模板。
我用 lvalue 和 ravlue 调用模板,但我没有在模板中看到确切的类型。我怎样才能让编译器在它专门化模板的时候吐出确切的类型?
#include <iostream>
#include <typeinfo>
class Widget{
public:
int x=0;
};
template<typename T>
void MyMethod(T&& param){
std::cout << typeid(param).name()<< std::endl; // this just says 6Widget...
};
Widget GetWidget(){
return Widget();
};
int main() {
Widget &w1 = * new Widget;
MyMethod(w1);
Widget w2;
MyMethod(w2);
MyMethod(GetWidget());
return 0;
}
这只是输出
6Widget
6Widget
6Widget
编译器有没有办法吐出它为调用模板所做的确切专业化和类型?
解决方案
真的很棒的书。好像你已经跳过了很多章节。
在第 4 项中,您将看到如何使用 Boost.TypeIndex 做到这一点,其中:
std::cout << boost::typeindex::type_id_with_cvr<decltype(param)>().pretty_name();
推荐阅读
- r - 如何在 HTTP 请求中建立数据库连接
- node.js - 如果目标类被扩展,TypeScript 合并声明组合不起作用
- google-cloud-platform - 什么是 BigQuery DML 配额限制
- python - TypeError: __init__() 接受 1 个位置参数,但给出了 2 个(Python multiprocessing with Pytesseract)
- javascript - 查找输入字段的单元格 ID?
- android - Flipper 网络插件不显示网络请求
- svg - 三个 js 线框球体 svg
- r - 刻面和 scale_color_manual
- linux - 在带有 OpenGL 的 Buildroot 系统上找不到 libgl.so
- python - 如何在manim中为扇区的角度和旋转同时变化设置动画