普通函数的模板
#include <iostream>
#include <array>
using namespace std;
typedef int* pInt; //重命名整形指针
template<typename FormatOutput> //模板
void fo(_In_ const FormatOutput& obj, bool EndFlag = false) { //格式化输出,不允许在函数修改obj的值(只读),提示编译器拒绝接收空指针(实际只会报警告),&引用 使传参效率更高
if (!EndFlag)
cout << obj << endl;
else
cout << obj;
}
int main(int* argc, char* argv[]) {
array<int, 6> num;
num.fill(1); //数组全部填充为1
num.at(1) = 2; //访问1号数据 并 修改它
fo<int>(num.at(1)); //打印 整形数据
fo<pInt>(num.data()); //打印 首地址
pInt Nptr = NULL;
fo<pInt>(Nptr, true); //测试一下空指针
return 0;
}
_In_
只会警告,不会使编译器强制报错
类模板
#include <bits/stdc++.h>
using namespace std;
typedef int* pInt; //重命名整形指针
template<typename FormatOutput> //模板
void fo(_In_ const FormatOutput& obj, bool EndFlag=false) { //格式化输出,不允许在函数修改obj的值(只读),提示编译器拒绝接收空指针(实际只会报警告)
if (!EndFlag)
cout << obj << endl;
else
cout << obj;
}
template<class HeightType, class LengthType>
class MyClass {
public:
MyClass(_In_ const HeightType& h, _In_ const LengthType& l)
:_height(h), _length(l) {}
~MyClass();
void printPrivateData(void) {
fo(_height);
fo(_length);
}
private:
HeightType _height;
LengthType _length;
};
int main(int* argc, char* argv[]) {
MyClass<int, double>* pMe1 = new MyClass<int, double>(1.1, 1.2);
pMe1->printPrivateData();
MyClass<double, int>* pMe2 = new MyClass<double, int>(1.1, 1.2);
pMe2->printPrivateData();
return 0;
}