#include "MyClass.h"

MyClass::MyClass(void)
{
    func("some string");
}

#include <iostream>
#include <iomanip>
template <class T> void MyClass::func(T x)
{
    std::cout << "in func(" << typeid(x).name() << "): "
              << x << std::endl;
}

/*
請注意, 當 template <class T> void MyClass::func(T x) { ... }
沒有定義在 MyClass.h 檔案中時, 因為 main() 中使用 x.func(r) 和 x.func(s),
編譯器在編譯 main.cpp 時沒有看到你寫在 MyClass.cpp 裡的 
template <class T> void MyClass::func(T x)
所以不會產生 func<double> 和 func<int> 兩個成員函式, 所以會出現下面
兩個連結錯誤, 
不過 func<char *> 因為是在 MyClass() 函式中使用到的,
不管你 template <class T> void MyClass::func(T x) 
是定義在 MyClass.h 或是 MyClass.cpp 中,
compiler 在編譯 MyClass.cpp 時是一定會產生的

1>  LINK : 最後的累加連結找不到或未建置 C:\user\pyting\testTemplate\Debug\testTemplate.exe，正在執行完整連結
1>main.obj : error LNK2019: 無法解析的外部符號 "public: void __thiscall MyClass::func<double>(double)" (??$func@N@MyClass@@QAEXN@Z) 在函式 _main 中被參考
1>main.obj : error LNK2019: 無法解析的外部符號 "public: void __thiscall MyClass::func<int>(int)" (??$func@H@MyClass@@QAEXH@Z) 在函式 _main 中被參考
1>C:\user\pyting\testTemplate\Debug\testTemplate.exe : fatal error LNK1120: 2 個無法解析的外部符號
*/

