C++11 常规指针和共享\u ptr的模板相同 我有一个C++模板,像下面的 template <class TYPE> bool writeRecordForSet(std::vector<TYPE*> entityPtr){ if(entityPtr.size()== 0) return true; ... } 模板 bool writeRecordForSet(std::vector entityPtr){ if(entityPtr.size()=0)返回true; ... }

C++11 常规指针和共享\u ptr的模板相同 我有一个C++模板,像下面的 template <class TYPE> bool writeRecordForSet(std::vector<TYPE*> entityPtr){ if(entityPtr.size()== 0) return true; ... } 模板 bool writeRecordForSet(std::vector entityPtr){ if(entityPtr.size()=0)返回true; ... },c++11,C++11,我想对std::shared_ptr使用相同的模板;i、 e.我有std::vector 如何使用相同的模板?我可能误解了这个问题,但您不能从tempaltised函数中删除*吗?比如: class Base {}; template <class Type> bool writeRecordForSet(std::vector<Type> entityPtr){ if(entityPtr.size()== 0) return true; //... }

我想对std::shared_ptr使用相同的模板;i、 e.我有
std::vector


如何使用相同的模板?

我可能误解了这个问题,但您不能从tempaltised函数中删除*吗?比如:

class Base {};

template <class Type>
bool writeRecordForSet(std::vector<Type> entityPtr){
    if(entityPtr.size()== 0) return true;
    //...
}

int main() {
    std::vector<std::shared_ptr<Base>> vec_shared;
    std::vector<int*> vec_intp;
    std::vector<std::unique_ptr<Base>> vec_unique_ptr;
    writeRecordForSet(vec_shared);
    writeRecordForSet(vec_intp);
    writeRecordForSet(vec_unique_ptr);
}
类基{};
模板
bool writeRecordForSet(std::vector entityPtr){
if(entityPtr.size()=0)返回true;
//...
}
int main(){
std::向量向量向量共享;
标准:向量向量向量intp;
std::vec_unique_ptr;
writeRecordForSet(向量共享);
编写记录集(vec_intp);
writeRecordForSet(vec_unique_ptr);
}

通过这种方式,您可以同时使用
vector
vector
作为函数的参数。(或任何其他指针类型,如unique_ptr)

我可能误解了这个问题,但您不能从tempaltised函数中删除*吗?比如:

class Base {};

template <class Type>
bool writeRecordForSet(std::vector<Type> entityPtr){
    if(entityPtr.size()== 0) return true;
    //...
}

int main() {
    std::vector<std::shared_ptr<Base>> vec_shared;
    std::vector<int*> vec_intp;
    std::vector<std::unique_ptr<Base>> vec_unique_ptr;
    writeRecordForSet(vec_shared);
    writeRecordForSet(vec_intp);
    writeRecordForSet(vec_unique_ptr);
}
类基{};
模板
bool writeRecordForSet(std::vector entityPtr){
if(entityPtr.size()=0)返回true;
//...
}
int main(){
std::向量向量向量共享;
标准:向量向量向量intp;
std::vec_unique_ptr;
writeRecordForSet(向量共享);
编写记录集(vec_intp);
writeRecordForSet(vec_unique_ptr);
}
通过这种方式,您可以同时使用
vector
vector
作为函数的参数。(或任何其他指针类型,如unique_ptr)

此类型不起作用
阶级基础{
公众:
int getVal(){return 0;}
};
模板
bool writeRecordForSet(std::vector entityPtr){
if(entityPtr.size()=0)返回true;
//...
对于(自动iter=entityPtr.begin();iter!=entityPtr.end();iter++){
类型enPtr=*iter;
int myval=enPtr->getVal();
}
返回true;
}
int main(){
std::向量向量向量共享;
标准:向量向量向量intp;
std::vec_unique_ptr;
writeRecordForSet(向量共享);
编写记录集(vec_intp);
writeRecordForSet(vec_unique_ptr);
}
这个不起作用
阶级基础{
公众:
int getVal(){return 0;}
};
模板
bool writeRecordForSet(std::vector entityPtr){
if(entityPtr.size()=0)返回true;
//...
对于(自动iter=entityPtr.begin();iter!=entityPtr.end();iter++){
类型enPtr=*iter;
int myval=enPtr->getVal();
}
返回true;
}
int main(){
std::向量向量向量共享;
标准:向量向量向量intp;
std::vec_unique_ptr;
writeRecordForSet(向量共享);
编写记录集(vec_intp);
writeRecordForSet(vec_unique_ptr);
}

错误C2784:'bool SM_OutputFormatop2::writeRecordForSet(std::vector)':无法从'std::vector'推断'std::vector'的模板参数错误C2784:'bool SM_OutputFormatop2::writeRecordForSet(std::vector)':无法从'std::vector'等一等推断'std::vector'的模板参数;让我来验证一下,这个不是工作类基类{public:int getVal(){return 0;};模板bool writeRecordForSet(std::vector entityPtr){if(entityPtr.size()=0)返回true;/…for(auto iter=entityPtr.begin();iter!=entityPtr.end();iter++){Type enPtr=*iter;int myval=enPtr->getVal();}返回true;}int main(){std::vector vec_shared;std::vector vec_intp;std::vector vec_unique_ptr;writeRecordForSet(vec_shared);writeRecordForSet(vec_intp);}您需要
Type&enPtr=*iter;
来允许
std::unique_ptr
enPtr->getVal()如果
enPtr
是一个
int*
,则无效。错误C2784:'bool SM_OutputFormatop2::writeRecordForSet(std::vector)':无法从'std::vector'错误C2784:'bool SM_OutputFormatop2::writeRecordForSet(std::vector)'“:无法从“std::vector”wait-wait推断出“std::vector”的模板参数;让我验证此参数是否适用于基类{public:int getVal(){return 0;}};模板bool writeRecordForSet(std::vector entityPtr){if(entityPtr.size()==0)return true;/…for(auto iter=entityPtr.begin());iter!=entityPtr.end();iter++{Type enPtr=*iter;int myval=enPtr->getVal();}返回true;}int main(){std::vector vec_shared;std::vector vec_intp;std::vector vec_unique_ptr;writeRecordForSet(vec_shared);writeRecordForSet(vec_intp)}您需要
Type&enPtr=*iter;
来允许
std::unique\u ptr
,并且如果
enPtr
int*
enPtr->getVal()无效。