gpt4 book ai didi

c++ - 行为不同于自定义模板类的 STL 容器的模板模板参数

转载 作者:太空宇宙 更新时间:2023-11-04 16:02:51 24 4
gpt4 key购买 nike

我有以下结构和函数

template <class T> struct C {};

template <template <class S> class T, class U> void f() { T<U> tu; }

当使用 C 模板化 f() 时,我没有得到错误,当使用 say std::vector 模板化时,我得到错误。

int main() {
f<C, int>();
}

没有错误

int main() {
f<std::vector, int>();
}

产量

error: no matching function for call to 'f'
f<std::vector, int>();
^~~~~~~~~~~~~~~~~~~~~~~~
note: candidate template ignored: invalid explicitly-specified argument for template parameter 'T'
template <template <class S> class T, class U> void f() { T<U> tu; }

这里的Cstd::vector有什么区别?

最佳答案

那是因为vector有两个模板参数,而不是一个(TAllocator)。

您可以更改您的 f 模板以接受两个模板参数(或可变参数包):

template <template <class...> class T, class U> void f() { T<U> tu; }

或者您可以将 vector 别名为 1 参数模板:

template<typename T>
using vec = std::vector<T>;

关于c++ - 行为不同于自定义模板类的 STL 容器的模板模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40413170/

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