2017年3月19日 星期日

C++ template 如何實現拆檔

template 如何實現拆檔

tags: C++ Concept
拆檔有兩種一種是在硬碟上拆檔,一種是在編譯時拆檔,兩者有很大的不同。

方法一

最簡單的方式,僅實現硬碟上拆檔實際編譯時仍然是一個檔案
// File "foo.h"
template<typename T>
void foo();
#include "foo.cpp"
// File "main.cpp"
#include "foo.h"
int main(){
  foo<int>();
}
// File "foo.cpp"
#include <iostream>
template<typename T>
void foo(){
  std::cout << "Here I am!\n";
}
使用命令
g++ main.cpp
在 Visual Studio 上就是別讓引入的檔案出現在左邊欄位即可,然後引入的檔案要複製到路徑內。


方法二

表明樣板的型態,這樣可以完全拆成兩個檔案,不過修改比較麻煩些也不自由
// File "foo.h"
template<typename T>
void foo();
// File "main.cpp"
#include "foo.h"
int main(){
  foo<int>();
}
// File "foo.cpp"
#include <iostream>
#include "foo.h"

template<typename T>
void foo(){
  std::cout << "Here I am!\n";
}
template void foo<int>();
使用命令
g++ main.cpp foo.cpp


沒有留言:

張貼留言