C++ 为什么模板参数推断/替换失败?

C++ 为什么模板参数推断/替换失败?,c++,templates,C++,Templates,这让我快发疯了。我正在尝试将类型转换为字节,然后再转换回来,这是我一直在做的。当我围绕我的方法构建函数时,我得到了模板推断错误,但我看不出为什么会发生这种情况。这是我的密码: #include <iostream> #include <vector> using namespace std; template<typename T> uint8_t *to_bytes(T &val) { return reinterpret_cast<

这让我快发疯了。我正在尝试将类型转换为字节,然后再转换回来,这是我一直在做的。当我围绕我的方法构建函数时,我得到了模板推断错误,但我看不出为什么会发生这种情况。这是我的密码:

#include <iostream>
#include <vector>
using namespace std;

template<typename T>
uint8_t *to_bytes(T &val) {
    return reinterpret_cast<uint8_t *>(&val);
};

template<typename T>
T *from_bytes(uint8_t *bytes) {
    return reinterpret_cast<T *>(bytes);
};

int main() {
    double a = 10.4;
    uint8_t *bytevals = to_bytes(a);

    // "Send" the data out and receive it into an array
    uint8_t bytes_rx[sizeof(a)];
    for (int byt_ndx = 0; byt_ndx < sizeof(a); ++byt_ndx) {
        bytes_rx[byt_ndx] = bytevals[byt_ndx];
    }

    double *thing_back;
    thing_back = from_bytes(&bytes_rx[0]);

    cout << *thing_back;
}
#包括
#包括
使用名称空间std;
模板
uint8字节到字节(t&val){
返回重新解释转换(&val);
};
模板
T*from_字节(uint8_T*字节){
返回reinterpret_cast(字节);
};
int main(){
双a=10.4;
uint8字节=到字节(a);
//“发送”数据并将其接收到数组中
uint8字节/rx[sizeof(a)];
for(int byt_ndx=0;byt_ndxcout模板参数
T
未在函数的参数中使用。因此,
T
无法从用于调用它的参数中推导出来

您需要明确说明模板参数

thing_back = from_bytes<double>(&bytes_rx[0]);

不要使用
使用名称空间std;
非常感谢!我在想,将
double*thing\u设置回从
从字节(&bytes\u rx[0])返回的值
足以通知模板。为什么它不能?我可以看出这种方法可能不够灵活,但我不确定原因。@LordGonk,函数返回值分配到的对象类型从未用于推断调用哪个函数。这不仅适用于函数模板,也适用于普通函数模板函数——成员函数和非成员函数。
thing_back = from_bytes<double>(&bytes_rx[0]);
template<typename T>
T *from_bytes(uint8_t *bytes, T* dummy) {
    return reinterpret_cast<T *>(bytes);
};
thing_back = from_bytes(&bytes_rx[0], things_back);