声明包含模板的struct的链接列表

时间:2016-07-03 14:04:17

标签: c++ templates

不允许使用typedef声明(SAPPLICATION_POOL_HEADER未声明....) 为什么呢?

template <class T>
typedef struct _sApplicationPoolHeader
{
    SAPPLICATION_POOL_LIST sApplicationList;
    T oData;
}SAPPLICATION_POOL_HEADER,
    *PSAPPLICATION_POOL_HEADER;

template <class T>
typedef LinkedListTemplate<SAPPLICATION_POOL_HEADER> LinkList;

编辑: SAPPLICATION_POOL_LIST的定义:

typedef struct _sApplicationPoolList
{
    struct _sApplicationPoolList* psPrevApplication;
    struct _sApplicationPoolList* psNextApplication;
}SAPPLICATION_POOL_LIST,
    *PSAPPLICATION_POOL_LIST,
        **PPSAPPLICATION_POOL_LIST;

1 个答案:

答案 0 :(得分:2)

typedef无法模板化。假设您(至少)拥有C ++ 11,则可以使用using关键字使用类型别名来执行此操作。

template <class T>
struct sApplicationPoolHeader
{
    SAPPLICATION_POOL_LIST sApplicationList;
    T oData;
};

template <typename T>
using LinkList = sApplicationPoolHeader<T>;

在原始文件中,您还包含SAPPLICATION_POOL_HEADERPSAPPLICATION_POOL_HEADER的名称。这在C ++中通常是不必要的(这是C中常见的习惯用法,因为没有typedef struct需要包含在类型中),但如果你也想要这些,

// Pure alias of SAPPLICATION_POOL_HEADER for sApplicationPoolHeader
template <typename T>
using SAPPLICATION_POOL_HEADER = sApplicationPoolHeader<T>;

// Alias of PSAPPLICATION_POOL_HEADER for pointer to sApplicationPoolHeader
template <typename T>
using PSAPPLCIATION_POOL_HEADER = sApplicationPoolHeader<T> *;