大牛们快来,一个跟模板构造函数有关的有关问题
大牛们快来,一个跟模板构造函数有关的问题
问题很简单,请看代码,只有一个类和一个main函数
#include <iostream>
#include <algorithm>
using namespace std;
class abc
{
public:
template<class T>
abc(T t,T t2){swap(t,t2);}
};
int main()
{
int a=1,b=2;
abc c(a,b);
cout<<"a="<<a<<",b="<<b<<endl;
system("pause");
return 0;
}
-----------------------------------------
abc c(a,b);这句话自动指定了int类型,但是当我要指定的是int&类型的时候发现错误
abc c<int&>(a,b);
这样指定类型在一般的成员函数的情况下是完全没问题的,但是当这是一个构造函数的情况下,
这句话就被归类为错误.
请问各位大牛,在不改变abc类中代码的情况下,如何能在调用该构造时指定是引用类型?
------解决方案--------------------
你只需改一下abc的声名,不需要改里面的代码。
------解决方案--------------------
试试用ref包装
需要c++11支持或者boost库
------解决方案--------------------
一般地说,不行。构造函数不可显式指定模板参数。
但是仅就你这个例子而言,如果你实在不能改动abc的代码,又想用abc的话,可以做一个代理:
问题很简单,请看代码,只有一个类和一个main函数
#include <iostream>
#include <algorithm>
using namespace std;
class abc
{
public:
template<class T>
abc(T t,T t2){swap(t,t2);}
};
int main()
{
int a=1,b=2;
abc c(a,b);
cout<<"a="<<a<<",b="<<b<<endl;
system("pause");
return 0;
}
-----------------------------------------
abc c(a,b);这句话自动指定了int类型,但是当我要指定的是int&类型的时候发现错误
abc c<int&>(a,b);
这样指定类型在一般的成员函数的情况下是完全没问题的,但是当这是一个构造函数的情况下,
这句话就被归类为错误.
请问各位大牛,在不改变abc类中代码的情况下,如何能在调用该构造时指定是引用类型?
------解决方案--------------------
你只需改一下abc的声名,不需要改里面的代码。
------解决方案--------------------
试试用ref包装
需要c++11支持或者boost库
------解决方案--------------------
一般地说,不行。构造函数不可显式指定模板参数。
但是仅就你这个例子而言,如果你实在不能改动abc的代码,又想用abc的话,可以做一个代理:
#include <iostream>
#include <algorithm>
using namespace std;
class abc
{
public:
template<class T>
abc(T t,T t2){swap(t,t2);}
};
struct int_proxy
{
int* p;
int_proxy(int& i) : p(&i){}
};
void swap( int_proxy& l, int_proxy& r )
{
std::swap(*l.p,*r.p);
}
int main()
{
int a=1,b=2;
int_proxy ia(a),ib(b);
abc c(ia,ib);
cout<<"a="<<a<<",b="<<b<<endl;
system("pause");
return 0;
}