אנו*_*ימי 5 c++ unique-ptr c++11 stdarray
我有一个类型声明为:
using Buffer = std::unique_ptr<std::array<uint8_t, N>>;
Run Code Online (Sandbox Code Playgroud)
我还有一个模板函数声明为:
template<typename Buffer>
bool temp_func()
{
// do something
}
Run Code Online (Sandbox Code Playgroud)
我正在使用 Buffer 类型调用 temp_func:
temp_func<Buffer>();
Run Code Online (Sandbox Code Playgroud)
现在,在 temp_func 中,我想获取该类型的大小Buffer,而不创建该类型的实例。
我需要的是类似于std::tuple_size<Buffer>::value除了我不能调用std::tuple_size,unique_ptr只能直接调用std::array。
我只能使用 C++11。我该怎么做?
Bri*_*ian 10
用于std::unique_ptr::element_type访问包含的数组类型,然后std::tuple_size像平常一样应用。
#include <array>
#include <cstddef>
#include <cstdint>
#include <memory>
#include <tuple>
constexpr std::size_t N{10};
using Buffer = std::unique_ptr<std::array<std::uint8_t, N>>;
static_assert(std::tuple_size<Buffer::element_type>::value == N, "error");
Run Code Online (Sandbox Code Playgroud)
在 C++17 或更高版本中,您可以替换std::tuple_size<T>::value为std::tuple_size_v<T>以更加简洁:
#include <array>
#include <cstddef>
#include <cstdint>
#include <memory>
#include <tuple>
constexpr std::size_t N{10};
using Buffer = std::unique_ptr<std::array<std::uint8_t, N>>;
static_assert(std::tuple_size_v<Buffer::element_type> == N);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
205 次 |
| 最近记录: |