我試圖使用一些可變參數模板參數,但我很快被我沒有設法理解的錯誤所阻止。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