gpt4 book ai didi

c++ - 指针模板特化

转载 作者:太空宇宙 更新时间:2023-11-04 15:26:12 25 4
gpt4 key购买 nike

我是 C++ 模板的新手,所以这是我的问题。

我有一个通用类 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 一个。谢谢。

最佳答案

TProductTableItemString ,通过继承它,导致 TProductTableItem<char*> 的实例化.在执行TProductTableItem::LoadFromBuffer ,这一行:

Value = buffer[Offset];

无法编译,因为 buffer[Offset] 是一个字节,而 Value 是一个 char*。

顺便说一下,TProductTableItemString不是特化,它只是继承然后隐藏LoadFromBuffer .如果你真的想专攻,你应该写:

template<>
class TProductTableItem<char*>
{
...
};

关于c++ - 指针模板特化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7786886/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com