常规指针和shared_ptr的模板相同

时间:2017-04-19 03:12:07

标签: c++11

我在C ++中有一个模板,如下所示

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

我想为std::shared_ptr使用相同的模板;即我有std::vector<std::shared_ptr>;

如何使用相同的模板?

2 个答案:

答案 0 :(得分:2)

我可能误解了这个问题,但是你不能从模板函数中删除*吗?类似的东西:

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);
}

这样,您可以同时使用vector<type*>vector<shared_ptr>作为函数的参数。 (或任何其他指针类型,如unique_ptr)

答案 1 :(得分:0)

This one does not work 
   class Base {
   public: 
       int getVal() { return 0; }
   };

   template <class Type>
   bool writeRecordForSet(std::vector<Type> entityPtr) {
    if (entityPtr.size() == 0) return true;
    //...
    for (auto iter = entityPtr.begin(); iter != entityPtr.end(); iter++) {
        Type enPtr = *iter;
        int myval = enPtr->getVal();
    }

    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);
   }