【发布时间】:2014-04-08 21:25:20
【问题描述】:
我有一个带有两个构造函数的类 X,定义如下:
template <typename T>
class X {
template <typename U>
X(U& u) {
// some logic
}
X(const Y<T>& y) {
// some other logic
}
};
类 Y 有一个返回 Y 类型对象的静态方法。
template <typename T>
class Y {
static Y<T> myStaticMethod(const T& t) {
// some logic
}
};
现在如果我尝试,下面的代码:
const Y<double>& obj = Y<double>::myStaticMethod(1.0);
X<double> xObj = new X<double>(obj);
具有双重模板 T 和 U 的构造函数被调用, T = double 这是预期的,但 U = Y<double>* 这是相当意外的。
我希望调用 X 的第二个构造函数,但它没有发生。还有,为什么我用引用调用构造函数时,obj会被转换成指针?
【问题讨论】:
-
您的构造函数模板太贪心,它说“允许从任何左值进行任何转换”,然后可能无法实际执行此转换。
new在 C++ 中不需要定义对象(据我所知,这里是错误的)。
标签: c++ templates constructor