2017-07-12 40 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

谢谢你解决了所有问题,你的意思是什么? –