私はC++でテンプレートを使い慣れていないので、ここに私の問題があります。ポインタテンプレートの特殊化
私は必要なものすべてを行うGenericクラスのProductItemを持っていますが、(char *のために)ポインタを使用するためには、その部分を特殊化する必要があります。
マイコード:
typedef unsigned char BYTE;
template<typename T>
class TProductTableItem
{
protected:
int Offset;
int DataLength;
T Value;
public:
virtual bool LoadFromBuffer(const BYTE* buffer, int count)
{
if(Offset + DataLength > count)
return false;
Value = buffer[Offset];
return true;
}
};
// Specialization (doesn't compile)
class TProductTableItemString : public TProductTableItem<char*>
{
bool LoadFromBuffer(const BYTE* buffer, int count)
{
if(Offset + DataLength > count)
return false;
memset(Value, 0, DataLength);
memcpy(Value, (void*)&buffer[Offset], DataLength);
return true;
}
};
このコードをコンパイルしようと、私は次のエラーメッセージをしました:私は間違って
cannot convert from 'const BYTE' to 'char*'
をやっていますか?
char*
タイプでも、TProductTableItem::LoadFromBuffer
機能を使用しようとしていますが、TProductTableItemString::LoadFromBuffer
ではないように見えます。おかげさまで あなたはバリュー割り当てるとき
memcpy(Value, (void*)&buffer[Offset], DataLength);
、同様に:あなたはあなたのmemcpyのラインがよりこのようになりたい
バッファ[オフセット]は多くの(多くの!)方法で悪に見えます。あなたの問題はテンプレートの専門化とは関係がないと私は思っています。あなたはここで達成するために何を望んでいますか? – sehe
@sehe:修正されました。しかし、あなたがこれを行う良い方法を持っているなら、私は;-)に入っています –
あなたは質問を修正しませんでした。あなたはそのクラスで何をしようとしていますか?クラスとCスタイルのキャストをミックスしています。あなたはunitialized char *(Value)を使って書いています。あなたがバイナリシリアル化の貧弱なバージョンをやっているようです。これを[非XYの質問](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)にすると、質の高い回答が得られます – sehe