gpt4 book ai didi

c++ - 在可变模板参数中混合类型和非类型?

转载 作者:可可西里 更新时间:2023-11-01 17:49:20 24 4
gpt4 key购买 nike

是否可以在可变模板参数中混合使用类型和非类型?例如,如果我要将 std::array 作为参数 T 传递给此类,我还需要传递数组的类型和长度,但是我在下面尝试的方式在遇到值时会导致错误,因为它只需要 Types 的类型:

template <
template<class, std::size_t> class T,
class ... Types>
class C {

T<Types...> storage;
};

int main(){
C<std::array, int, 3> c;
}

错误信息:

error: template argument for template type parameter must be a
type
Container<std::array, int, 3> c;
^

有没有办法在可变上下文中传递类型和值?

最佳答案

Is it possible to do mixing of types and nontypes in variadic template parameters?

没有。你不能混搭。但是由于您可以将值包装在类型中而不是相反,您可以只停留在类型的世界中:

template <template<class...> class T, class ... Types>
class C {
T<Types...> storage;
};

然后只需让 std::array 只处理类型即可:

template <class T, class N>
using my_array = std::array<T, N::value>;

template <size_t N>
using size_ = std::integral_constant<size_t, N>;

所以你原来的例子变成了:

C<my_array, int, size_<3>> c;

关于c++ - 在可变模板参数中混合类型和非类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42125733/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com