چراش که زیاد سخت نیست چون زمان کامپایل وقتیکه نوع template را تعریف می کنید کامپایلر میاد آن تابع را با نوع موردنظر به صورت inline در فایل باینری می نویسه حالا این سورسی که باید ازش استفاده کنه بایستی توی هدر باشه.یک استثنا هم وجود داره که شما یکبار دیگه singature تابع را با نوع استفاده شده در سورس خودتون ذکر کنید.به صورت زیر:
//header.h
#ifndef TEST_H
#define TEST_H
template <class T>
void test(T value);
#endif TEST_H
//source.cpp
#include "stdafx.h"
#include "Header.h"
#include <iostream>
using namespace std;
template <class T> void test(T value) {
cout << value;
}
template void test<int>(int value);
//caller.cpp
#include "header.h"
void caller(){
test<int>(1);
}
بله راه حل دیگه هم اینه که ببرید توی struct یا class تعاریف template را.