【发布时间】:2013-06-21 12:02:33
【问题描述】:
我有以下例子:
struct Wrapper
{
virtual ~Wrapper()
{
}
template <typename U>
WrapperT<U> * clone()
{
return new WrapperT<U>(value); //will not work, because value is not known here
}
};
template <typename T>
struct WrapperT : Wrapper
{
explicit WrapperT(T v)
{
value = v;
}
T value;
};
我想要这样的东西:
Wrapper *t = new WrapperT<int>(1);
WrapperT<double> *t2 = t->clone<double>();
我知道虚拟模板不可用。有什么想法吗?
【问题讨论】:
-
当有人在下一行执行
t->clone<foo*>()时,您希望发生什么? (其中foo是完全不相关的类型) -
转换构造函数
template<typename U> explicit WrapperT(const WrapperT<U>&);怎么样? -
@jrok:那个构造函数不会知道真正的类型。他想从指向基类的指针转换为派生类型。