Nic*_*ick 6 c++ sfinae constexpr c++14
我正在实现一些非常类似std::vector但在堆栈上使用数组而不是内存分配的东西.
d-tor调用使用SFINAE的函数.
value_type是POD功能有空体.value_type是正常类std::string,则函数有一个正文并正确销毁所有数据.现在,我希望能够使用这个新std::vector的constexpr.然而,即使c-tor被声明constexpr,代码也不会编译,因为类有非平凡的d-tor.
这是代码的一小部分:
template<typename T, std::size_t SIZE>
class SmallVector{
constexpr SmallVector() = default;
~SmallVector(){
destructAll_<value_type>();
}
// ...
template<typename X>
typename std::enable_if<std::is_trivially_destructible<X>::value == true>::type
destructAll_() noexcept{
}
};
Run Code Online (Sandbox Code Playgroud)
constexpr如果value_type是POD并保持非POD数据类型的功能,我可以做什么来使类成为可能.
(当然不是在同一时间)
遗憾的是,无法使用SFINAE启用/禁用析构函数,也无法使用未来的概念.这是因为destructos:
你可以做的是专门化整个类,或者更好的是,创建一个只包含构造/破坏和基本访问的基类,并将其专门化.
template <class T, class Enable = void>
struct X {
~X() {}
};
template <class T>
struct X<T, std::enable_if_t<std::is_pod<T>::value>> {
};
static_assert(std::is_trivially_destructible<X<int>>::value);
static_assert(!std::is_trivially_destructible<X<std::vector<int>>>::value);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
525 次 |
| 最近记录: |