gpt4 book ai didi

c++ - 如何专门化 const 和非 const 容器的模板?

转载 作者:太空狗 更新时间:2023-10-29 23:33:02 25 4
gpt4 key购买 nike

我正在尝试对模板进行 2 次特化:

  • 接受非 const 容器的容器
  • 另一个接受常量容器

我当前的代码是:

template<class T>
struct A{
constexpr static int value=0;
};

template<template<typename>class T,typename...Args>
struct A<T<Args...>>{//accept non const containers
constexpr static int value=1;
};

template<template<typename>class T,typename...Args>
struct A<T<Args...> const>{//accept const containers
constexpr static int value=2;
};

ideone

但是该代码不起作用,如果我使用 const 容器,它会使用第一个 A 的实例化而不是第三个。

using Type=const std::array<int,10>;
std::cout<<A<Type>::value;//output is 0

我试过删除

template<class T>
struct A{
constexpr static int value=0;
};

但它给了很多errors ..

我该怎么办?

最佳答案

我认为你可以在没有可变模板参数的情况下做到这一点:

template<class T>
struct A{
constexpr static int value=0;
};

template<class T>
struct A<T const> {
constexpr static int value=2;
};


int main()
{
std::cout << A<const std::vector<int>>::value;
}

关于c++ - 如何专门化 const 和非 const 容器的模板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24233979/

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