Реализация метода шаблонного класса в *.cpp или задать размер массива, который является членом класса через конструктор

Массив std::array является членом класса. Нужно задавать его размер через конструктор. С этим вроде разобрался:

Com.h:

#include <array>

template <uint8_t data_size>
class Com
{
public:
    Com(uint8_t type);
    void write();
private:
    uint8_t _type;
    std::array<uint32_t, data_size> _data;
};

Com.cpp:

#include "com.h"

template <uint8_t data_size>
Com<data_size>::Com(uint8_t type)
{
    _type = type;
};

Проблема: как реализовать методы класса в cpp файле? Как для обычного класса void Com::write(){} не работает: error: 'Com' is not a class, namespace, or enumeration

Желательно обойтись без std::vector, нужен статический массив.

Если делать так:

template <uint8_t data_size>
void Com<data_size>::write()
{
}

то уже линкер ругается: Undefined symbol Com<(unsigned char)8>::Com(unsigned char) (referred from BUILD/source/main.o).

UPD: линкер ругается как раз таки на реализацию конструктора в cpp файле, а не метода.


Ответы (1 шт):

Автор решения: Harry

Как обычно:

template <uint8_t data_size>
void Com<data_size>::write()
{
    ....
};
→ Ссылка