【发布时间】:2013-04-12 22:17:05
【问题描述】:
我认为这真的很容易,但我还没有开始工作。我想使用模板来定义类的静态无符号字符数组数据成员的大小。我在我的两个函数上使用模板来定义正在使用的数据类型,并且效果很好。我在想这样的事情:
template<unsigned S>
class Buff
{
private:
static unsigned char buffer[S];
int offset;
public:
pAllocBuff(){offset=0;};
template <typename T>
T* New(T, int);
template <typename T>
T* New(T);
};
这个想法是 New(T, int) 从缓冲区为数据类型数组分配内存。
即:char* i = myBuff.New<char>('\0',15); //allocate 15 byte array to i from buffer and initialized to '\0'
或New(T)从缓冲区为单一数据类型分配内存
即:string* j = myBuff.New<string>("Hello Stack Overflow!"); //allocate memory to string object j from buffer and initialize
如果我用 BUFFSIZE 和 #define BUFFSIZE 1024*1024(或其他)替换“S”,一切正常。但我想这样做,以便可以为不同的 Buff 实例定义缓冲区的大小。所以,比如:
Buff<1024*1024> myBuff;
当我这样做时,我的类中的所有成员函数都被标记为缺少模板参数,即使 S 与它们无关。
编辑:我得到了这个与下面的建议一起工作。我想我很困惑为什么
'模板'
需要在类中的每个函数之上,即使在该函数中没有使用 S。这只是需要,因为它已经结束了课程吗? 感谢您的知识!
【问题讨论】:
-
您需要显示实际错误,以及使用它的实际代码。在有问题的版本中
-
pAllocBuff()是错字吗?应该是Buff() -
是的,这是一个错字,对不起。它只是 Buff()。
-
Is this just required because it is over the class? 是的,这是必需的,因为您正在定义 类模板 的成员,并且甚至没有声明该类的非模板版本。