Хотелось бы сделать подобное на С++. Внизу приведен текст 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.