考虑以下类模板:
template<class T, std::size_t S, SomeEnum = SomeEnum::NOT_DYNAMIC>
class Foo {
在某些地方将被定义为
class SomeEnum { NOT_DYNAMIC, DYNAMIC };
该类有一个私有的
std::array
,但是基于用户传递给Somenum的值,我想使用std::vector
。例如,如果用户通过SomeEnum::DYNAMIC
,我将使用std::vector
而不是std::array
。这将通过std::conditional_t
和[[no_unique_address]]
。
我想知道是否有一种方法可以“删除”非类型模板参数S
,以防用户传递
SomeEnum::DYNAMIC
。这是为了避免使用用户类型A大小,因为不必要,因为底层的contaier为std::vector
。同时,我需要保留S
参数,以防用户不将任何内容传递给SomeEnum
,因为std::array
也需要大小。
有一些骗局,如果没有,我该如何解决?current的思想:
用STD :: conditdatal_t解释,
使用继承或使用专业化(尚未尝试或想到)
std::span<T, N>
std::dynamic_extent
(
(std::size_t) -1
),您可以使用它具有std::vector
astd::array
:
template<class T, std::size_t S = std::dynamic_extent>
class Foo {
private:
std::conditional_t<(S == std::dynamic_extent), std::vector<T>, std::array<T, S>> container;
};