我在一個泡菜,跟進我的previous question和使用類似的代碼我posted here。從lambda自動獲取模板類型
- 我用它接受可變參數對象可變參數模板功能
- 它把它們打包成一個元組他們使用
visitor
成語 - 綁定每個對象的回調
相反
template <typename... Args>
void make_classes(Args... args)
{
auto t = std::tuple<Args...>(args...);
unsigned int size = std::tuple_size<decltype(t)>::value;
auto execute = [](auto & obj){ obj.operator()(); };
for (int i = 0; i < size; i++) {
visit_at(t, i, execute);
}
}
我想明白,我怎麼能演繹出auto
拉姆達的模板類型,這樣我就可以將其綁定:
template <typename... Args>
void make_classes(Args... args)
{
auto t = std::tuple<Args...>(args...);
unsigned int size = std::tuple_size<decltype(t)>::value;
auto execute = [](auto & obj){
// obtain type of obj as T?
auto callback = std::bind(&T::deserialise, obj, std::placeholders::_1);
// do something else here using this callback.
};
for (int i = 0; i < size; i++) {
visit_at(t, i, execute);
}
}
這裏有一個問題:參數對象是不可複製的(雖然我可以改變),但我想知道是否/如何通過推斷訪問者獲取的元組中包裝的模板類型來實現上述功能。
如果我不能推斷類型拉姆達內,我可以採用某種商店它元組內(例如,:類型&對象),以便以後提取它?
你不需要'decltype (自動)'? – NathanOliver
@NathanOliver我不知道,那會如何工作? –
@NathanOliver似乎是你的東西,使用'decltype(obj'返回錯誤:類型'decltype(obj)'不能在'::'之前使用,因爲它沒有成員'打印在正確的類型錯誤 –