【发布时间】:2013-06-06 20:47:14
【问题描述】:
当声明一个模板类的成员变量时,有没有办法根据某些模板参数的值使其需要零内存?
一个例子是定义类似std::array<T,n> 的东西,当n==0 时需要零空间。
例如:
template<int num_optional_args> class C {
int some_variable;
std::array<int,num_optional_args> optional_args;
};
num_optional_args==0 时有没有办法消除 optional_args 的开销?
std::array<T,n> 的大多数实现为一个 T 元素保留空间,即使在 n==0 时也是如此。
还有其他方法可以保留零空间吗? 为什么这不是 C++ 标准的一部分?
【问题讨论】:
-
该标准防止类的大小为零,因此您永远不能让
sizeof(C<0>)成为0。除此之外,当模板参数为0时提供一个特化,你可以对这种情况的类定义做任何你想做的事情。 -
“保留零空间”这句话是什么意思?
-
@GManNickG:我认为
sizeof (C<N+1>) == sizeof (C<N>) + sizeof (int)代表所有非负数N。现在它只适用于N >= 1。问题是将其扩展到N == 0。
标签: c++ arrays templates memory-management stdarray