我必须创建一个使用数组的类。数组可以具有在对象构造时定义的可变长度(具有实际数字),这意味着我在编译时知道它的大小。
所以,我尝试创建一个模板,我可以在其中输入大小并使用该大小构造对象。这样我仍然可以使用数组。
但是这段代码没有编译。
使用类模板需要模板参数列表
我做错了什么?
H:
#pragma once
class BinaryMemoryReader;
template <int bytesPerValue>
class ChunkBlockChannel
{
public:
std::map<unsigned int, unsigned char[bytesPerValue * 1024]> cbcLayer;
std::map<unsigned int, unsigned char[bytesPerValue]> jj;
void read(BinaryMemoryReader &reader);
ChunkBlockChannel();
~ChunkBlockChannel();
};
CPP:
#include "ChunkBlockChannel.h"
#include "BinaryMemoryReader.h"
template <int bytesPerValue>
void ChunkBlockChannel::read(BinaryMemoryReader &reader) {
for (int i = 0; i < 64; ++i) {
bool flag;
reader.read<bool>(flag);
std::vector<unsigned char> cbcLayerData;
std::vector<unsigned char> jjData;
if (!flag) {
unsigned char data[bytesPerValue * 1024];
reader.readBytes(data, bytesPerValue * 1024);
cbcLayer[i] = data;
} else {
unsigned char data[bytesPerValue];
reader.readBytes(data, bytesPerValue);
jj[i] = data;
}
}
}
template <int bytesPerValue>
ChunkBlockChannel::ChunkBlockChannel() {}
template <int bytesPerValue>
ChunkBlockChannel::~ChunkBlockChannel() {}
答案 0 :(得分:2)
也许还有别的......但你已经忘记了方法定义中的模板参数。
我的意思是
template <int bytesPerValue>
void ChunkBlockChannel<bytesPerValue>::read(BinaryMemoryReader &reader) {
// remember this ^^^^^^^^^^^^^^^
和
template <int bytesPerValue>
ChunkBlockChannel<bytesPerValue>::ChunkBlockChannel() {}
// and this ^^^^^^^^^^^^^^^
和
template <int bytesPerValue>
ChunkBlockChannel<bytesPerValue>::~ChunkBlockChannel() {}
// and this ^^^^^^^^^^^^^^^