Listing 7 Permutations of enum_simple_sequence<> and functionals in test program.
using comstl::enum_simple_sequence; using comstl::input_cloning_policy; using comstl::LPOLESTR_policy; using comstl::BSTR_policy; using winstl::listbox_back_inserter; using winstl::combobox_back_inserter; using winstl::listview_back_inserter; static void MOCtlFns_Test_Put(HWND hwnd) { LPUNKNOWN punk; HRESULT hr = MOCtlFns_Test_GetEnumerator(hwnd, IID_IUnknown, reinterpret_cast<void**>(&punk)); HWND hwndList = MOCtlFns_Test_GetListWindow(hwnd); if(SUCCEEDED(hr)) { HWND hwndTab = ::GetDlgItem(hwnd, IDC_TAB); int iCurSel = TabCtrl_GetCurSel(hwndTab); int idList = Tab_GetItemData(hwndTab, iCurSel); if(::IsDlgButtonChecked(hwnd, IDC_STRING)) { LPENUMSTRING penum; hr = punk->QueryInterface(IID_IEnumString, reinterpret_cast<void**>(&penum)); if(SUCCEEDED(hr)) { typedef enum_simple_sequence < IEnumString , LPOLESTR , LPOLESTR_policy , LPCOLESTR , input_cloning_policy<IEnumString> , 5 > enum_sequence_t; // Declare the sequence (and eat the reference) enum_sequence_t values(penum, false); switch(idList) { case IDC_LISTBOX: std::for_each(values.begin(), values.end(), listbox_back_inserter(hwndList)); ListBox_ResetContent(hwndList); break; case IDC_COMBOBOX: std::for_each(values.begin(), values.end(), combobox_back_inserter(hwndList)); ComboBox_ResetContent(hwndList); break; case IDC_LISTVIEW: std::for_each(values.begin(), values.end(), listview_back_inserter(hwndList)); ListView_DeleteAllItems(hwndList); break; } } } else if(::IsDlgButtonChecked(hwnd, IDC_BSTR)) { LPENUMBSTR penum; hr = punk->QueryInterface(IID_IEnumBSTR, reinterpret_cast<void**>(&penum)); if(SUCCEEDED(hr)) { typedef enum_simple_sequence < IEnumBSTR , BSTR , BSTR_policy , BSTR const , input_cloning_policy<IEnumBSTR> , 5 > enum_sequence_t; // Declare the sequence (and eat the reference) enum_sequence_t values(penum, false); switch(idList) { case IDC_LISTBOX: std::for_each(values.begin(), values.end(), listbox_back_inserter(hwndList)); ListBox_ResetContent(hwndList); break; case IDC_COMBOBOX: std::for_each(values.begin(), values.end(), combobox_back_inserter(hwndList)); ComboBox_ResetContent(hwndList); break; case IDC_LISTVIEW: std::for_each(values.begin(), values.end(), listview_back_inserter(hwndList)); ListView_DeleteAllItems(hwndList); break; } } } else { . . . // etc. etc. } punk->Release(); } }