cxx笔记08-模板

//MyClass.h
#pragma once
#ifndef MYCLASS_H
#define MYCLASS_H
#include <iostream>
#include <memory>

class NeptuneScene;
class NeptuneElem;
class NeptuneTrack;

class YouClass
{
public:
	YouClass() {}
	void Printing(const std::string& str)
	{
		std::cout << str.c_str() << std::endl;
	}
};
template<typename C, typename U>
class MyClass
{
public:
	MyClass();
	U const& Max(const C& a, const U& b);

	template<typename T>
	void Printg(const std::string& a, const T& b);
protected:

private:

};

class He 
{
public:
	He();

	template<typename H>
	void tempHe(const std::string& path,const H& type);
private:
	NeptuneScene* ms_pNeptuneScene;
	NeptuneElem* ms_pNeptuneElem;
	NeptuneTrack* ms_pNeptuneTrack;
};
/*
template<>
class MyClass<int, double>
{
public:
	MyClass() {}
	double const& Max(const int& a, const double& b)
	{
		return a < b ? b : a;
	}
private:

};
*/
#endif //MYCLASS_H
//MyClass.cpp
#include "MyClass.h"
#include "../neptune.pb.h"
#pragma comment(lib,"libprotobufd.lib")
#pragma comment(lib,"libprotocd.lib")
using namespace std;
template<typename C,typename U>
MyClass<C,U>::MyClass()
{
	//std::cout << "My Class Create." << std::endl;
}

template<typename C, typename U>
U const& MyClass<C,U>::Max(const C& a, const U& b)
{
	return a < b ? b : a;
}

template<typename C, typename U>
template<typename T>
void MyClass<C, U>::Printg(const std::string& a, const T& b)
{
	if (typeid(*b) == typeid(YouClass))
	{
		cout << "this is You Class" << endl;
	}
	else {
		cout << "not id" << endl;
	}
	b->Printing(a);
}

He::He()
{
	std::cout << "this He create" << std::endl;
	ms_pNeptuneScene = new NeptuneScene;
	ms_pNeptuneElem = new NeptuneElem;
	ms_pNeptuneTrack = new NeptuneTrack;
}

template<typename H>
void He::tempHe(const string& path,const H& type)
{
	cout << path.c_str() << endl;
	cout << typeid(type).name() << endl;

	ms_pNeptuneScene->set_name("hello NeptuneScene.");
	cout << ms_pNeptuneScene->name() << endl;
}
//template class MyClass<int,int>;
posted @ 2024-06-30 17:23  alvinlyb  阅读(1)  评论(0编辑  收藏  举报