非型テンプレートを使うときにソースとヘッダファイルを分ける

型テンプレートでソースコードとヘッダーを分ける話はよく見るけど、非型テンプレートでどうやるかわからなかったので書いておく。

結果、できたのだが標準仕様を読んだわけではないので環境固有だったりするかもしれない。

詳しい人がいたら教えていただければと思う。

今回試した環境は  Visual Studio 2019。

ヘッダー

template <uint32_t size>
class Base
{
public:
    Base();
    virtual void func() = 0;

protected:
    static constexpr uint32_t kSize = size;
    char data[kSize]{};
};


class Data : public Base<17>
{
public:
    Data();
    void func() final override;


};

ソースコード

template<uint32_t size>
Base<size>::Base()
{
    for (uint8_t ii = 0; ii < 10; ++ii)
    {
        data[ii] = ii;
    }
}

Data::Data()
{
    data[10] = 10;
    data[11] = 11;
}

void Data::func()
{
    for (uint32_t ii = 0; ii < kSize; ++ii)
    {
        if (ii != 0 && ii % 8 == 0U)
        {
            printf("\n");
        }
        printf("%0x ", data[ii]);

    }
}

Base<size>::Base() のように書くのがポイントなんだろうなきっと。

C++ もふんわりとしか使っていなからちゃんと理解しないといけないんだろうと思う今日この頃。