function3.h中的代码:
#ifndef FUNCTION3_H #define FUNCTION3_H #include <string> #include <cstring> #include <iostream> template <typename T> T myMax(const T p1, const T p2) { std::cout << "template default func" << std::endl; return p1 < p2 ? p2 : p1; } // the compiler will use 'template int func' as the specialization for 'template default func' template <> int myMax(int int1, int int2) { std::cout << "template int func" << std::endl; return int1 < int2 ? int2 : int1; } // the compiler will use 'int func' as the instantiation for 'template default func' // it has to be put after 'template int func' int myMax(int int1, int int2) { std::cout << "int func" << std::endl; return int1 < int2 ? int2 : int1; } #endif // FUNCTION3_H
测试代码main.cpp:
#include <iostream> #include "function3.h" using namespace std; int main() { cout << myMax(21.0, 31.0) << endl; cout << myMax(21, 31) << endl; cout << myMax<int>(21, 31) << endl; return 0; }
结果: