gpt4 book ai didi

templates - 使用 `std::vector` 作为模板模板参数的默认值

转载 作者:行者123 更新时间:2023-12-02 04:15:42 25 4
gpt4 key购买 nike

假设 foo 是一个采用容器类型的模板,它本身有一个模板参数来指定其值的类型:

template <template<typename val_t> class container_t>
struct foo;

为了方便起见,foo 应将 std::vector 作为默认容器。问题在于,std::vector 形式上有两个参数,其中第二个参数有默认值。这意味着 ...container = std::vector 不起作用。

C++11 的解决方案是定义模板别名:

template<typename val_t> using vec_dummy = std::vector<val_t>;
template <template<typename val_t> class container_t = vec_dummy>
struct foo;

我不喜欢,为了可读性(你必须搜索vec_dummy),也是为了美观(没有理由命名该类型)。

有没有办法以某种方式匿名定义模板别名?当然也热烈欢迎其他解决该问题的方法。

PS:实际上,foo 使用内部数据类型作为所提供容器的值类型,因此

template <typename container_t = std::vector<int>> struct foo;

这不是一个选项。

最佳答案

您可以将 container_t 设为可变模板模板参数 (shiver)。

template <template<typename val_t, typename...> class container_t = std::vector>
struct foo;

这样您就可以专注于值类型,但仍保留任何分配器模板参数等。

关于templates - 使用 `std::vector` 作为模板模板参数的默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33892142/

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