gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 14:36:36 24 4
gpt4 key购买 nike

我有一个 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com