我有一组不同类型的容器,每个容器都与一个字符串id相关联.如果关联的容器不为空,则以下函数应打印id.
如果我想将std :: vector的大小传递给函数,我应该将它作为size_type对象传递吗?像这样:
void printIfNotEmpty(const std::string& id, size_type sizeOfContainer)
{
if(sizeOfContainer)
{
output << id << " is not empty";
}
else
{
output << id << " is empty";
}
}
Run Code Online (Sandbox Code Playgroud)
如果是这样,size_type在什么命名空间中?如何在代码中包含其定义?
也许这是一个解决方案:
template<class T>
void printIfNotEmpty(const std::string& id, const T& container)
{
if(container.size())
{
output << id << " is not empty";
}
else
{
output << id << " is empty";
}
}
Run Code Online (Sandbox Code Playgroud)
我应该将它作为size_type对象传递吗?
这是最便携的事情.(顺便说一句,它不是一个类对象的"对象";它是一个无符号整数类型,大到足以表示任何向量的大小).
如果你知道它是带有标准分配器的向量,并且将来不太可能改变,那么使用它可能不那么冗长std::size_t.
(当然,在这个简单的例子中,传递一个布尔标志,或者删除条件并使调用者负责决定是否调用该函数更有意义;但我假设它的目的是表示更复杂传递大小有意义的情况).
如果是这样,size_type在什么命名空间中?
每个标准容器(以及为满足标准容器要求而设计的任何其他容器)将其定义为嵌套类型.
如何在代码中包含其定义?
定义是<vector>; 你必须将它限定为std::vector<whatever>::size_type.
std::size_t定义于<cstddef>.
| 归档时间: |
|
| 查看次数: |
618 次 |
| 最近记录: |