编译器会优化函数指针的解引用和函数指针自身之间的差异,使用方法没有差别,具体实例请看测试用例部分。
#include<iostream>
using namespace std;
//类模板
template<typename T>
class Test
{
public:
Test(T val = 0) { cout << "Test(T val)" << endl; }
};
//1、不完全特例化 变量指针类型 *
template<typename T>
class Test<T *>
{
public:
Test(T *val = NULL) { cout << "Test(T *val)" << endl; }
};
//2、不完特例化 函数指针类型 void(*)()
template<typename T>
class Test<void(*)(T)>
{
public:
Test(void(*pfun)(T) = NULL) { cout << "Test(void(*pfun)(T))" << endl; }
};
//3、不完全特例化 函数原型 void()(T)
template<typename T>
class Test<void(T)>
{
public:
Test(void fun(T)) { cout << "Test(void fun(T))" << endl; }
};
void ordinaryFun(int)
{
cout <&l