不允许使用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;
答案 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_HEADER
和PSAPPLICATION_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> *;