我正在尝试创建一个读取函数,它可以从向量中读取字节并将它们转换为基本类型。
创建模板可能不是最好的选择,但我找不到更好的选择。我发现了类似但不同的主题Template return type deduction from lvalue?。
简而言之,这意味着在以下代码中编写int test = read(it);
而不是int test = read<int>(it);
:
#include <iostream>
#include <vector>
#include <type_traits>
template<typename T, typename = std::enable_if<std::is_fundamental<T>::value>>
T read(std::vector<char>::const_iterator& it) {
T v;
char* p = (char*)&v;
for (size_t i=0; i < sizeof(T); i++) {
*(p+i) = *(it++);
}
return v;
}
int main()
{
std::vector<char> v{0,0,0,1};
std::vector<char>::const_iterator it = v.begin();
auto begin = it;
int test = read<int>(it);
std::cout << test << " bytes readed :" << std::distance(begin,it) << std::endl;
}