创建半动态定义的数组

时间:2017-09-10 19:02:14

标签: c++ templates

我必须创建一个使用数组的类。数组可以具有在对象构造时定义的可变长度(具有实际数字),这意味着我在编译时知道它的大小。

所以,我尝试创建一个模板,我可以在其中输入大小并使用该大小构造对象。这样我仍然可以使用数组。

但是这段代码没有编译。

使用类模板需要模板参数列表

我做错了什么?

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() {}

1 个答案:

答案 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 ^^^^^^^^^^^^^^^