【发布时间】:2015-03-30 20:50:44
【问题描述】:
我希望有一个类型特征,对于任何在使用前不需要初始化内存并且可以将其复制构造函数实现为 memcpy 的类型返回 true。
我希望它返回 true
- 整数类型(char、short int、int、long int 等)
- 浮点数类型(float、double)
- il::array(il::array 是我自己的 std::array 实现)因为 T 是 int、double、il::array 等之一。
对于诸如 std::vector 之类的东西以及在构造时需要某些东西的任何对象(大多数对象)为 false。
std::is_pod 似乎非常接近我想要的,因为它也为 std::array 返回 true,但不幸的是它不会为我自己的 il::array 返回 true。有什么方法可以“教导” is_pod 我的 il::array 表现为普通的旧数据,或者一种简单的方法来推出我自己的类型特征?
有关信息,这是我对 il::array: 的实现:
namespace il {
template <typename T, int n>
class array {
private:
T data_[n > 0 ? n : 1];
public:
array(const T& value)
: array() {
for (int k = 0; k < n; ++k) {
data_[k] = value;
}
}
array(std::initializer_list<T> list) {
IL_ASSERT(n == static_cast<int>(list.size()));
for (int k = 0; k < n; ++k) {
data_[k] = *(list.begin() + k);
}
}
const T& operator[](int k) const {
IL_ASSERT(static_cast<unsigned int>(k) < static_cast<unsigned int>(n));
return data_[k];
}
T& operator[](int k) {
IL_ASSERT(static_cast<unsigned int>(k) < static_cast<unsigned int>(n));
return data_[k];
}
T* data() {
return data_;
}
int size() const {
return n;
}
};
}
【问题讨论】:
标签: c++ typetraits