あんまりよろしく無いと思うんですが
テンプレートの実装部をcppに書く場合

Unit2.h
template<typename T>
struct _X{
    typedef T type;
    T* o_;
    _X();
    ~_X();
    T* func1();
};
Unit2.cpp
template<typename T> _X<T>::_X()
{
    o_ = new T();
}
template<typename T> _X<T>::~_X()
{
    delete o_;
}
template<typename T> T* _X<T>::func1()
{
    decltype(o_) l_ = new T();
    return l_;
}

こんな感じで分ける事が可能です。
template<typename T> struct _X{}の場合、cpp実装側でtemplate<typename T> _X<T>::_X(){}するとコンストラクタ実装可能です。

Unit1.cpp
#include "Unit2.h"
#include "Unit2.cpp"
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
    _X<TStringList> x;
    if (std::is_same<_X<TStringList>::type, TStringList>::value)
    {
        std::unique_ptr<_X<TStringList>::type > obj_ = std::make_unique<TStringList>( x.func1() );
        for (int i = 0; i < 10; i++)
        {
            obj_->Append(i);
        }
    }
}
//---------------------------------------------------------------------------

コンパイル時に毎度cppも呼ば無いとリンクエラーになるので
実装もヘッダーに書く方が良いと思います。

https://community.embarcadero.com/blogs/entry/cpp-japan

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.