これは私を夢中にしています。私はタイプをバイトに変換することを実験しています。私のアプローチを中心に機能を構築したので、テンプレートの控除エラーが発生していましたが、なぜそれが起こっているのかわかりません。 HERESに私のコード:なぜテンプレート引数の控除/置換が失敗しますか?
#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;
}
そして、私が構築エラー:
C:\Users\Peter\CLionProjects\CodingPractice\main.cpp: In function 'int main()':
C:\Users\Peter\CLionProjects\CodingPractice\main.cpp:31:41: error: no matching function for call to 'from_bytes(uint8_t*)'
thing_back = from_bytes(&bytes_rx[0]);
^
C:\Users\Peter\CLionProjects\CodingPractice\main.cpp:14:4: note: candidate: template<class T> T* from_bytes(uint8_t*)
T *from_bytes(uint8_t *bytes) {
^
C:\Users\Peter\CLionProjects\CodingPractice\main.cpp:14:4: note: template argument deduction/substitution failed:
C:\Users\Peter\CLionProjects\CodingPractice\main.cpp:31:41: note: couldn't deduce template parameter 'T'
thing_back = from_bytes(&bytes_rx[0]);
それは私が関数が関数でコードを直接呼び出して交換した場合、すべてがうまく動作言及する価値があります。
名前空間stdを使用して '使用しないでください;' –