如何使用可变模板参数调用模板函数?
How to make template function call with variadic template parameter?
下面是我的简单可变参数模板函数。此模板将 std::tuple 作为其输入参数之一。但它拒绝编译并出现错误 "template argument deduction/substitution failed".
任何人都可以指出我犯的错误吗?
#include <tuple>
using namespace std;
template<typename... TT, typename ReturnType>
ReturnType& getValue(int ind, std::tuple<TT...>& t, ReturnType& val) {
return val;
}
int main() {
std::string str("Hello"), result;
std::tuple<std::string> t = std::make_tuple(str);
getValue<std::tuple<std::string>, std::string>(0, t, result);
return 0;
}
下面是编译输出。
g++ -c tuple.cc -std=c++1z; g++ -o tuple tuple.o
tuple.cc: In function ‘int main()’:
tuple.cc:15:64: error: no matching function for call to ‘getValue(int, std::tuple<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >&, std::__cxx11::string&)’
getValue<std::tuple<std::string>, std::string>(0, t, result);
^
tuple.cc:7:13: note: candidate: template<class ... TT, class ReturnType> ReturnType& getValue(int, std::tuple<_Elements ...>&, ReturnType&)
ReturnType& getValue(int ind, std::tuple<TT...>& t, ReturnType& val) {
^
tuple.cc:7:13: note: template argument deduction/substitution failed:
tuple.cc:15:64: note: mismatched types ‘std::tuple<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >’ and ‘std::__cxx11::basic_string<char>’
getValue<std::tuple<std::string>, std::string>(0, t, result);
^
谢谢。
getValue(0, t, result);
那将编译。 ...TT
不是元组,它是 std::string
.
你试图用 ...TT
来调用它 std::tuple<std::string>, std::string, ...
这当然不匹配 std::string
.
下面是我的简单可变参数模板函数。此模板将 std::tuple 作为其输入参数之一。但它拒绝编译并出现错误 "template argument deduction/substitution failed".
任何人都可以指出我犯的错误吗?
#include <tuple>
using namespace std;
template<typename... TT, typename ReturnType>
ReturnType& getValue(int ind, std::tuple<TT...>& t, ReturnType& val) {
return val;
}
int main() {
std::string str("Hello"), result;
std::tuple<std::string> t = std::make_tuple(str);
getValue<std::tuple<std::string>, std::string>(0, t, result);
return 0;
}
下面是编译输出。
g++ -c tuple.cc -std=c++1z; g++ -o tuple tuple.o
tuple.cc: In function ‘int main()’:
tuple.cc:15:64: error: no matching function for call to ‘getValue(int, std::tuple<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >&, std::__cxx11::string&)’
getValue<std::tuple<std::string>, std::string>(0, t, result);
^
tuple.cc:7:13: note: candidate: template<class ... TT, class ReturnType> ReturnType& getValue(int, std::tuple<_Elements ...>&, ReturnType&)
ReturnType& getValue(int ind, std::tuple<TT...>& t, ReturnType& val) {
^
tuple.cc:7:13: note: template argument deduction/substitution failed:
tuple.cc:15:64: note: mismatched types ‘std::tuple<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >’ and ‘std::__cxx11::basic_string<char>’
getValue<std::tuple<std::string>, std::string>(0, t, result);
^
谢谢。
getValue(0, t, result);
那将编译。 ...TT
不是元组,它是 std::string
.
你试图用 ...TT
来调用它 std::tuple<std::string>, std::string, ...
这当然不匹配 std::string
.