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)