gpt4 book ai didi

c++ - 容器的 decltype 过滤作为模板参数

转载 作者:行者123 更新时间:2023-11-28 01:42:39 25 4
gpt4 key购买 nike

<分区>

我正在尝试编写一个通用函数,它将返回任何容器的大小,该容器具有 size() 方法和 size_type 定义。到目前为止,我尝试了两种方法,但都没有编译:

1.

template <typename Cont>
auto len(Cont const& cont) -> decltype(std::declval<Cont&>().size(), Cont::size_type)
{
return cont.size();
}

2.

template <typename T, template <typename U, typename = std::allocator<U>> typename Cont>
auto len(Cont<T> const& cont) -> decltype(std::declval<Cont<T>&>().size(), Cont<T>::size_type)
{
return cont.size();
}

尝试测试它:

std::vector<int> vec;
auto sz = len(vec);

显然,当我删除尾随的 decltype() 时,一切都按预期进行。我知道,这也可以通过 std::enable_if 来实现,但出于教育目的,我必须考虑这一点。请解释我遗漏了什么

附言对于将问题标记为重复的任何人,我不是在问“我必须在哪里以及为什么必须放置"template"和"typename"关键字?”,因为在我写这个问题时,我还没有弄清楚,这就是我所缺少的

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