работа с шаблонами и несколькими конструкторами - PullRequest
0 голосов
/ 14 декабря 2018

Я только начал использовать шаблоны и c ++.

Я хочу добавить шаблонный класс как закрытый внутри другого класса.

Я хочу добавить этот класс:

Заголовок:

template <class type>
class BufferedDatenKonsistenz {
public:
    BufferedDatenKonsistenz(type* buffer0, type* buffer1, type* buffer2);
    BufferedDatenKonsistenz(type* buffer0, type* buffer1);

    //some methods
private:
    const int16_t numberOfBuffers;

    type* buffers[3];

    //some other members
};

Источник:

template<class type>
BufferedDatenKonsistenz<type>::BufferedDatenKonsistenz(type* buffer0, type* buffer1, type* buffer2) : numberOfBuffers(3){
    this->buffers[0] = buffer0;
    this->buffers[1] = buffer1;
    this->buffers[2] = buffer2;
}

template<class type>
BufferedDatenKonsistenz<type>::BufferedDatenKonsistenz(type* buffer0, type* buffer1) : numberOfBuffers(2){
    this->buffers[0] = buffer0;
    this->buffers[1] = buffer1;
    this->buffers[2] = NULL;
}

И добавить этот класс как закрытый член в какой-то другой класс:

Другой заголовок класса:

class SomeClass {
public:
    SomeClass();
    ~SomeClass();

    //some stuff

private:

    //some stuff

    static const uint16_t cyclicDataSize = 50;
    uint16_t cyclicDataArea0[cyclicDataSize];
    uint16_t cyclicDataArea1[cyclicDataSize];
    uint16_t cyclicDataArea2[cyclicDataSize];

    // How do I get this right???????????????????????????????????????????????????
    DatenKonsistenz::BufferedDatenKonsistenz<uint16_t> bufferLogik(cyclicDataArea0,
                                                                   cyclicDataArea1,
                                                                   cyclicDataArea2);
};

Я не знаю, возможно ли то, что я пытаюсь сделать.Но если это возможно, я не знаю, неправильны ли элементы шаблона, или мне, возможно, придется переместить все внутри конструкторов в список инициализаторов или что-то еще.

Здесь слишком много потенциальных ошибок, которые я могу 'Я сам это не понимаю.

Кстати.Я застрял на C ++ 03, потому что компилятор не может сделать ничего более нового.

1 Ответ

0 голосов
/ 14 декабря 2018

Вы должны иметь возможность безопасно инициализировать их в конструкторе SomeClass, например, в списке инициализации:

SomeClass::SomeClass()
  : bufferLogik(cyclicDataArea0, cyclicDataArea1, cyclicDataArea2)
{}
...