我试图使用一些可变参数模板参数,但我很快被我没有设法理解的错误所阻止。C++多变量模板不绑定到函数参数
#include <tuple>
template <typename T>
struct Foo
{
typedef T type;
};
// return a tuple of pair of args and Foo templated on Types
template <typename Head, typename ...Args, typename Type, typename ...Types>
auto func(Head arg, Args... args)
{
return std::tuple_cat(std::make_tuple(std::make_pair(arg, Foo<Type>())),
func<Args..., Types...>(args...));
}
template <typename Head, typename Type>
auto func(Head arg)
{
return std::make_tuple(std::make_pair(arg, Foo<Type>()));
}
int main()
{
func<int, bool, char>(1, 2, 3);
}
这里FUNC试图解开模板参数,使一对FUNC论证的元组和一个Foo结构模板在第二可变参数模板,但我有:
test.cc:25:3: error: no matching function for call to 'func'
func<int, bool, char>(1, 2, 3);
^~~~~~~~~~~~~~~~~~~~~
test.cc:11:6: note: candidate template ignored: couldn't infer template argument 'Type'
auto func(Head arg, Args... args)
^
test.cc:18:6: note: candidate function template not viable: requires single argument 'arg', but 3
arguments were provided
auto func(Head arg)
^
1 error generated.
为什么类型不能为推断 ? (海湾合作委员会告诉我一样)
我确信在sed :: tuple_cat实现(https://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-api-4.5/a01066_source.html)之后可以使用多个可变参数模板,我认为这是一个简单的例子,如果有解决方案,或者如果标准不接受这一点。
感谢您的帮助,
它应该推断为什么?你告诉它'Head'和2'Args',并给出了它们各自的函数参数。 'Type'不在那里使用,所以它不可能被推断出来。 – chris