消息关闭
    暂无新消息!
template<typename T>
void mergesort(T begin,T end){
if((end - begin) > 1){
typename T::value_type *temp = new typename T::value_type[end - begin];
mergesort(begin,begin + (end - begin)/2);
mergesort(begin+(end-begin)/2,end);
merge(begin,begin + (end - begin)/2,end,temp);
for(int i = 0; i < end - begin;++i)
*(end - 1 - i) = temp[i];
delete []temp;
}
//printmy(begin,end);
};

如上,今天写一个归并排序的时候,需要开辅助数组,原本输入参数是迭代器没有问题,但输入参数是指针类型时;
 typename T::value_type *temp = new typename T::value_type[end - begin];
这句会报错,指针没有value_type的成员,请问下如何如果传入的是指针,如何确定其类型?
下面这个就不用说了
template<class T>void fun(T* val);


5个回答

︿ 2
手机客户端好像有问题
std::declval<T>()
std::declval\<T\>()
std::declval&lt;T&gt;()
︿ 1
很简单,用rebind大法,说白了你就写一个模板类型重绑定template<typename T> class rebind; 然后里面定义好value_type,把真正的T用这个typename rebind<T>::value_type转换,当然了,如果只是简单的ptr,可以尝试楼上说的,不过太老的C++编译器可能不支持。
︿ 0
这是模版的一个特点,如果写了
T::value_type
就表示,类型T中有value_type这种类型可以使用;如果T中没有这种类型,又要模版中使用这种类型,那不行!模版好像不是这样用的。