c++ - 如何判断 C++ 生成了什么模板

标签 c++ templates

我有一个 C++ 模板函数,看起来像

template <class T>
void Item::SetValue(T value){
    std::ostringstream oss;
    oss << value;
    this->value = oss.str();
}

一直运行良好,直到今天我的操作系统 (vxworks) 向我抛出一个 SPE 异常。这基本上意味着我试图在不允许的任务上下文中进行浮点运算。如果我确实在做任何浮点运算,那会很好,但实际上我只是传递了一个 uint32_t。到这个功能。但是,其他模块在别处对该函数进行了数百次调用,所以谁知道 C++ 生成了什么。

我需要确定这就是问题所在(我 99% 确定)所以我想知道是否有任何方法可以让我弄清楚 C++ 编译器为该调用生成了什么函数。有什么办法吗?


我可能要问一个新问题。我在调试器中发现它正在使用 Item::SetValue<unsigned int>并且它实际上在 std::num_put<char, std::ostreambuf_iterator<char, std::char_traits<char>>>::do_put 中抛出异常(至少,我认为)。这是指令输出,在 evstdd 中失败这肯定在 SPE 集中。仍然不知道为什么它想要做任何 float 的事情。

有没有可能

oss << value

会一直对待value作为 float ,以防万一? IE 中 std::num_put ?我不知道如何解决这个问题。

Instruction set

最佳答案

是的,你可以使用type_traits

if(std::is_same_v(T, uint32_t)) { /*debug info*/ }

关于c++ - 如何判断 C++ 生成了什么模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63197084/

相关文章:

c++ - Eclipse for C++中的Visual Studio工具链

c++ - 无法编译在不同类上调用静态函数的代码

node.js - html-webpack-plugin - 如何在不执行 EJS 模板的情况下插入 webpack bundle.js

c++函数代码泛化使用模板

c++ - C++中客户端到服务器的数据传输问题

c++ - 如何在没有 STL C++ 的情况下列出所有变体

c++ - 如何在编译时推断嵌套std::vector的内部类型?

c++ - 为 conio.h 使用另一个 header

C++ 模板特化 - 避免重新定义

templates - 从模板返回动态 AliasSeq