[code]
// IBase.h
#pragma once

template < typename T >
class IBase
{
protected:
        T        _Value;

public:
        IBase(T);
        ~IBase(void);

        T*        GetValuePointer(void);
};


// IBase.cpp
#include "IBase.h"

template < typename T >
IBase<T>::IBase(T Value)
{
        _Value = Value;
}

template < typename T >
IBase<T>::~IBase(void)
{
}

template < typename T >
T* IBase<T>::GetValuePointer(void)
{
        return &_Value;
}

// main.cpp
#include "IBase.h"

int main(char arg[], char arg1[])
{
        IBase<int> local(3);
        int* pValue = local.GetValuePointer();

        return 0;
}
[/code]

[code]
결과
1>main.obj : error LNK2019: "public: __thiscall IBase<int>::~IBase<int>(void)" (??1?$IBase@H@@QAE@XZ) 외부 기호(참조 위치: _main 함수)에서 확인하지 못했습니다.
1>main.obj : error LNK2019: "public: int * __thiscall IBase<int>::GetValuePointer(void)" (?GetValuePointer@?$IBase@H@@QAEPAHXZ) 외부 기호(참조 위치: _main 함수)에서 확인하지 못했습니다.
1>main.obj : error LNK2019: "public: __thiscall IBase<int>::IBase<int>(int)" (??0?$IBase@H@@QAE@H@Z) 외부 기호(참조 위치: _main 함수)에서 확인하지 못했습니다.
1>D:\Project\Study\Debug\Study00.exe : fatal error LNK1120: 3개의 확인할 수 없는 외부 참조입니다.
[/code]

이런식의 구현을 해봤습니다...
링크 에러가 나네요. 물론, 헤더에다 정의와 함께 구현도 집어넣으면 문제 없습니다.
다만, 괜히 정의와 구현을 파일단위로 분리 하려고 했더니...보기좋은떡이 먹기도 좋아보여서 ㅋㅋ

오랜만에 템플릿으로 구현하려고 보니까, 링크에러가 발생해서 어떤 해결책이 있던가 궁금합니다.
또, 왜 에러가 발생하는지도 궁금하구요.