我試圖編譯如下:與模板函數作爲參數可變參數模板功能
#include <vector>
#include <array>
template <typename T>
void sort(T &container) {}
template <typename F, typename T, typename ...Tail>
void sort_containers(F sort_func, T &container, Tail &...tail) {
sort_func(container);
sort_containers(sort_func, tail...);
}
template <typename F, typename T>
void sort_containers(F sort_func, T &container) {
sort_func(container);
}
int main() {
std::vector<int> x = {1,2,3};
std::vector<double> y = {1.0, 2.0, 3.0};
std::array<char, 3> z = {{'d' , 'b', 'c'}};
sort_containers(sort, x, y, z);
}
導致以下編譯器錯誤與G ++ 4.8:
error: no matching function for call to
‘sort_containers(<unresolved overloaded function type>,
std::vector<int>&, std::vector<double>&, std::array<char, 3u>&)’
我瞭解我需要在將sort
傳遞給sort_containers
時指定模板參數,但我不確定這是如何在存在可變模板函數的情況下工作的。
它的工作原理與使用非變化模板'sort_three_containers'一樣。也就是說,不太好。您不需要傳遞函數(模板),而是使用具有成員函數模板的對象進行排序,以便每次遞歸調用sort_containers時都會發生實例化。 –
使用非variadic模板,我可以執行以下操作:http://ideone.com/jBg5yT,但我想這個例子不會擴展到'sort_three_containers' – countfromzero