在表达参数和模板特化的教训,你学会了如何表达参数可用于参数化模板类。
让我们再看看我们以前的缓冲类实例:
template <typename T, int nSize> // nSize is the expression parameter
class Buffer
{
private:
// The expression parameter controls the side of the array
T m_atBuffer[nSize];
public:
T* GetBuffer() { return m_atBuffer; }
T& operator[](int nIndex)
{
return m_atBuffer[nIndex];
}
};
int main()
{
// declare a char buffer
Buffer<char, 10> cChar10Buffer;
// copy a value into the buffer
strcpy(cChar10Buffer.GetBuffer(), "Ten");
return 0;
}
现在,我们想写一个函数打印出一个缓冲区作为一个字符串。虽然我们可以实现这个作为一个成员函数,我们将作为一个非成员函数而不是做它因为它将使连续的例子更容易理解。
使用模板,我们可以这样写:
1
2
3
4
5
template <typename T, int nSize>
void PrintBufferString(Buffer<T, nSize> &rcBuf)
{
std::cout << rcBuf.GetBuffer() << std::endl;
}