首页 > 解决方案 > c ++在模板函数的指针中约束模板参数

问题描述

在没有标准库支持的情况下,我正在使用核心 c++11 语言功能开发代码库。因此命名空间 std 中的所有内容都是由几年来不再接触 c++ 的供应商实现的。

我想做的是一个清理功能,它从std::vector<T*>.

template<typename T>
void Cleanup(std::vector<T*> &v)
{
    for(T*& p : v)
    {
        delete p;
        p = nullptr;
    }
}

它有点工作。但我认为对输入参数进行一些限制会很好,因此只能在函数类型中传递一个指针,就像std::is_pointer<T>在 std 中一样。知道如何在没有标准的情况下做到这一点吗?

#include <iostream>
#include <cstdlib>
#include <vector>
#define EOL "\n"
class A{
    public:
    A():data(0){}
    int data; 
};
class B{};

std::vector<A*> va;
std::vector<B*> vb;


int main()
{
    for(int i = 0; i<3; ++i)
    {
        va.push_back(new A());
    }

    for(int i = 0; i<5; ++i)
    {
        vb.push_back(new B());
    }


    std::cout << va.size() << " : "<<  vb.size() << std::endl;
    Cleanup(va);
    Cleanup(vb);

    for(std::size_t i = 0; i<va.size(); ++i)
    {
        if(va[i] != nullptr)
        {
            std::cout << "Failed to clean : " << va[i] << "["<< va[i]->data <<"]" << EOL; 
        }
    }
}

欢迎任何其他建议。

标签: c++11templates

解决方案


推荐阅读