//以指针为模板参数
template<int *p >
struct wrapper
{
/* data */
int get(){return *p;}
void set(int v){*p=v;}
};
//以引用为模板参数
template<int &p>
struct wrapper1
{
/* data */
int get(){return p;}
void set(int v){p=v;}
};
int global_var=0;
int main(int argc, char const *argv[])
{
wrapper<&global_var>gwrapper;
gwrapper.set(1);
cout<<gwrapper.get()<<endl;
wrapper1<global_var>gwrapper1;
gwrapper1.set(2);
cout<<gwrapper1.get()<<endl;
return 0;
}