c++ - 指针模板特化

标签 c++ templates

我是 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/

相关文章:

c++ - vector 中对象的内存分配

c++ - 基于最大公除法的排序顺序

c++ - TensorFlow C++ API 中 ClientSession 和 Session 的区别

python - 如何将对象从详细 View 发送到 Django 中的另一个 View ?

templates - XSLT 在 for-each 中应用模板

django - Jinja2多级模板继承问题

c++ - 动态迭代静态信息

java - 如何在 Xcode 4 中添加 Java 模板项目?

c++ - 安全删除窗口子类化?

c++ - 我怎样才能使 boost::filesystem::path 不区分大小写