gpt4 book ai didi

c++ - 模板作为函数模板的参数 - 推导失败

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

我想创建这样的模板,它可以将 TT 类模板推导为 T 类型:

#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

template < template <typename> class TT, typename T>
T f(TT<T*> & A ){
cout << "it works\n";
return *A[0];
};


int main(){
vector<int*> v;
f(v);
return 0;
}

我有一个错误(使用 clang-4.0):

temded2.cpp: In function ‘int main()’:
temded2.cpp:20:21: error: no matching function for call to ‘f(std::vector<int*>&)’
f<std::vector>(v);
^
temded2.cpp:12:3: note: candidate: template<template<class> class TT, class T> T f(TT<T*>&)
T f(TT<T*> & A ){
^

我认为 TT 应该等于 std::vector 而 T 应该等于 int,我做错了什么?

最佳答案

您的模板模板参数不是您认为的那样。 std::vector<T> 还有更多内容超出您的想象,包括您没有考虑的默认模板参数。幸运的是,C++11 中的可变参数将帮助您解决该问题

#include <iostream>
#include <vector>

template < template <typename, typename...> class TT, typename T, typename... Args>
T f(TT<T*, Args...> & A )
{
std::cout << __PRETTY_FUNCTION__ << '\n';
if (A.size() > 0)
return *(A[0]);
return T();
};

int main()
{
std::vector<int*> v;
f(v);
return 0;
}

输出

T f(TT<T *, Args...> &) [TT = vector, T = int, Args = <std::__1::allocator<int *>>]

注意 Args多于。因为在您非常特定 模板模板参数预期 arg 列表中缺少这些,所以没有匹配项。如您所见,可变参数可以解决该问题。

关于c++ - 模板作为函数模板的参数 - 推导失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42043843/

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