Хотелось бы сделать подобное на С++. Внизу приведен текст proba.cpp, методы инициализации и деинициализации без параметров. Как бы сделать так чтобы можно было предавать методы инициализации и деинициализации с одним параметром, который передается тоже через шаблон? /// proba.cpp #include <iostream> template<typename C> class WithActiveObject { public: typedef bool (C::*InitCallback0)(); typedef void (C::*ShutdownCallback0)(); WithActiveObject(C& object, InitCallback0 init, ShutdownCallback0 shutdown) : _status(false), _object(&object), _init0(init), _shutdown0(shutdown) { _status = (_object->*_init0)(); } ~WithActiveObject() { if(_status) { (_object->*_shutdown0)(); } } bool status() const { return _status; } private: bool _status; C *_object; InitCallback0 _init0; ShutdownCallback0 _shutdown0; private: WithActiveObject(); WithActiveObject(const WithActiveObject&); WithActiveObject& operator=(const WithActiveObject&); }; class MyDevice { public: MyDevice() { std::cout << "MyDevice created." << std::endl; } ~MyDevice() { std::cout << "MyDevice destroyed." << std::endl; } bool init() { std::cout << "MyDevice initialized" << std::endl; return true; } void shutdown() { std::cout << "MyDevice uninitialized" << std::endl; } bool doSomething() { return false; } }; void test_device(MyDevice& device) { WithActiveObject<MyDevice> obj(device, &MyDevice::init, &MyDevice::shutdown); std::cout << "Testing device..." << std::endl; if(!device.doSomething()) { std::cerr << "Failed to test device." << std::endl; return; } } int main() { MyDevice device; test_device(device); return 0; } output: if doSomething() returns false: MyDevice created. MyDevice initialized Testing device... Failed to test device. MyDevice uninitialized MyDevice destroyed. output: if doSomething() returns true: MyDevice created. MyDevice initialized Testing device... MyDevice uninitialized MyDevice destroyed.
Ответ на:
комментарий
от anonymous
Ответ на:
комментарий
от den73
Ответ на:
комментарий
от anonymous
Ответ на:
комментарий
от anonymous
Ответ на:
комментарий
от kira89
Ответ на:
комментарий
от Vinick
Ответ на:
комментарий
от www_linux_org_ru
Ответ на:
комментарий
от anonymous
Ответ на:
комментарий
от anonymous
Ответ на:
комментарий
от anonymous
Ответ на:
комментарий
от Burbaka
Ответ на:
комментарий
от den73
Ответ на:
комментарий
от den73
Ответ на:
комментарий
от den73
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Поле типа unique_ptr и деструктор (2019)
- Форум не деструктятся шаред поинтеры (2012)
- Форум чем можно заменить min_element/max_element с условием выборки? (2020)
- Форум Передача параметров по ссылке. Что не так с моей программой? (2018)
- Форум Самодельный пасер на С++ : не удаляет комментарии (2015)
- Форум Валится на throw (2005)
- Форум [C++] Статические константы класса в выражениях (2011)
- Форум Почему так сделали в std::unique_ptr? (2014)
- Форум [творчество, C++] Variable is unbound (2010)
- Форум Содержит ли данный код UB? Попытка №2 (2018)