C++クラステンプレートのファイル作成

7126 ワード

質問:
  • クラステンプレートのメンバー関数の作成タイミングは呼び出しフェーズであり、ファイル作成時に
  • にリンクされない.
    解決:
  • 解決方法1:直接含む.cppソースファイル
  • 解決策2:宣言と実装を同じファイルに書き、接尾辞名を変更する.hpp,hppは約束の名前であり,強制
  • ではない.
    person.hpp中コード:
    #pragma once
    #include 
    using namespace std;
    #include 
    
    template<class T1, class T2>
    class Person {
    public:
    	Person(T1 name, T2 age);
    	void showPerson();
    public:
    	T1 m_Name;
    	T2 m_Age;
    };
    
    //         
    template<class T1, class T2>
    Person<T1, T2>::Person(T1 name, T2 age) {
    	this->m_Name = name;
    	this->m_Age = age;
    }
    
    //         
    template<class T1, class T2>
    void Person<T1, T2>::showPerson() {
    	cout << "  : " << this->m_Name << "   :" << this->m_Age << endl;
    }
    

    クラステンプレートはファイルに分けて作成する.cpp中コード
    #include
    using namespace std;
    
    //#include "person.h"
    #include "person.cpp" //    1,  cpp   
    
    //    2,          ,       .hpp
    #include "person.hpp"
    void test01()
    {
    	Person<string, int> p("Tom", 10);
    	p.showPerson();
    }
    
    int main() {
    
    	test01();
    
    	system("pause");
    
    	return 0;
    }
    

    主流の解決方法は2つ目で、クラステンプレートのメンバー関数を一緒に書き、接尾辞名を変更する.hpp