2017-07-12 72 views
-1

我試着做模板類菜單類的,我試圖通過一個T型,是能夠改變參數類,使其成爲多種用途與<function>

template<class T> 
    class Menu : public std::vector<std::tuple<uint8_t, std::wstring, std::function<void(T)>>> { 
/**code over here**/ 
} 

但每次使用模板GCC給我一個錯誤

C:\Users\InfoLabA-PC04\Desktop\Ar\Arley.hpp:188:8: error: invalid parameter type 'void' 
    class Menu : public std::vector<std::tuple<uint8_t, std::wstring, std::function<void(T)>>> { 
     ^~~~ 

當我嘗試使用它像

Menu<void> MenuName; 
+3

你不能傳遞參數是'void' ... – Charles

+0

您應該避免從'性病繼承:: vector'順便說一句,更喜歡組合。 – Jarod42

+0

我的意思是'模板<..> class Menu {std :: vector <..> data; };'。 – Jarod42

回答

3

您可以在聲明中更改到

template <typename... Ts> 
class Menu : public std::vector<std::tuple<uint8_t, 
              std::wstring, 
              std::function<void(Ts...)>>> { 
    // ... 
}; 

,並用它

Menu<> MenuName; 
+0

謝謝你解決了所有問題,你的意思是什麼? –