配列を使用するクラスを作成する必要があります。配列は、オブジェクトの構築時に(実際の数で)定義された可変長を持つことができます。これは、コンパイル時にサイズがわかっていることを意味します。半動的に定義された配列を作成する
私はサイズを入力してそのサイズでオブジェクトを構築できるテンプレートを作成しようとしました。このようにしても配列を使用できます。
しかし、このコードはコンパイルされません。
クラステンプレートを使用するにはテンプレート引数リストが必要です
私は間違っていますか?
時間:
#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() {}
を意味ですか? – user0042
オブジェクトの作成時に配列のサイズを知っている必要があると言うのは、コンパイル時に配列のサイズを知ることと同じではありません... –
私は知っている、私はちょうどすべてが単一の値で異なります。おそらく、配列を使用する必要があります。 – Karlovsky120