class Foo
{
public:
Foo(const void* data) : m_dataPtr(data) {}
template<typename T>
const T Get() {
const T* readPoint = static_cast<const T*>(m_dataPtr);
m_dataPtr = (const char *) m_dataPtr + sizeof(T);
return *(readPoint);
}
private:
const void* m_dataPtr;
};
我得到了上面的类,现在我想给它添加一个重载,operator>>
这样我就可以做到:
Foo foo("Hello World");
int8_t firstChar; // I want to get the first Char
int16_t firstShort; // Get the 2 next bytes
foo >> firstChar;
foo >> firstShort;
所以我创建了这个重载函数:
template<typename T>
void operator>>(Foo& lhs, T& rhs)
{
rhs = lhs.Get<T>();
}
但我不确定它是否有效,因为整数类型被转换成int
然后搞砸了sizeof(T)