gpt4 book ai didi

C++ 指针模板特化

转载 作者:行者123 更新时间:2023-11-28 00:12:48 26 4
gpt4 key购买 nike

我正在尝试设计一个 T* 类型的模板类,声明如下:

template <class T>
class StructParamPublic<T*>
{
.....
protected:
T* m_pData;
};

可用于创建这样的结构

StructParamPublic <FloatArrayStruct*> m_pFloatArray;

在哪里

FloatArrayStruct
{
float* pData;
size_t arraySize;
};

但是,当我编译它时,我收到一条错误消息,指出 StructParamPublic 不是模板类型。

如果我定义如下模板类

template <class T>
class StructParamPublic
{
.....
protected:
T m_Data;
};

然后这个错误就消失了。出于某些设计考虑,我不想将第二个定义添加到框架中。

我的解决方案是想出这样的东西

template <class T>
class StructParamPublic
{
.....
protected:
T* m_pData;
};

它编译得很好。

所以我的问题:是模板 <class T> class StructParamPublic某种“基本模板类”和template <class T>class StructParamPublic<T*>该类的某种派生?

最佳答案

template <class T> class StructParamPublic<T*>;

的特化
template <class T> class StructParamPublic;

所以对于你的问题,你有几种可能:

  • (部分)特化

    template <class T> class StructParamPublic;

    template <class T>
    class StructParamPublic<T*>
    {
    // code
    protected:
    T* m_pData;
    };

    StructParamPublic<int>会导致未定义类的错误。

  • static_assert

    template <class T>
    class StructParamPublic
    {
    static_assert(std::is_pointer<T>::type, "type should be a pointer type");
    using value_type = typename std::remove_pointer<T>::type;

    // code
    protected:
    T m_pData; // or value_type* m_pData;
    };

    StructParamPublic<int>由于 static_assert 会导致一个干净的错误.

  • 或更改参数的含义作为您的解决方案。

    template <class T>
    class StructParamPublic
    {
    .....
    protected:
    T* m_pData;
    };

    StructParamPublic<int>在这里使用,而以前的解决方案需要 StructParamPublic<int*> .

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

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