c++11 - 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;
}
}
}
欢迎任何其他建议。
解决方案
推荐阅读
- python - 为什么在 itertoools.permutations() 使用期间使用 string.split(' ') 和 string[:-1] 使用拆分的字符串部分时会得到不同的结果?
- c# - 为 UWP 创建新的语法 xml
- javascript - 对象值到数组,然后替换,而不是函数?
- sharepoint - Microsoft Graph API - 使用搜索未找到站点 - 我如何找到所有站点?
- rabbitmq - 关于 RabbitMQ/AMQP 中的消息顺序保证
- sql-server - SQL循环遍历表名并插入
- wordpress - 在 Docker 容器之间可以 ping 但不能 wget
- angular - 角材料 | 按下按钮文本时,Material Button 的行为有所不同
- postgresql - PSQLException: FATAL: 抱歉,已经有太多客户
- verilog - 这个 [verilog] 多路复用器的合成数字电路是哪个,具有未完成的敏感度列表?