【随笔记】C++ 友元机制的有趣应用

一种友元的应用,可以组合业务类,实现子类的事件回调中直接调用业务类的某些业务模块。

class Button {

public:

	class Event {
		public:
		virtual ~Event() {};
		virtual void onEvent(int key, int val) = 0;
	};

private:
	std::shared_ptr<Button::Event> sp_event_;
	static void onThMonitorProcess(Button* contex) {
		while (...) {
			contex->sp_event_->onEvent(KEY_F1, 1);
		}
	}

public:

	Button(std::shared_ptr<Button::Event> sp_event) {
		sp_event_ = sp_event;
	}

	bool start() {
		// 启动线程
	}

	void stop() {
		// 停止线程
	}
};

class Business
{
private:

	class ButtonEvent : public Button::Event {
		public:
			Business* context;
			friend class Business;
			ButtonEvent(Business* context) { this->context = context; }

		private:
			virtual void onEvent(int key, int val) {
				context->setLed(val); // 可以直接调用 Business 私有方法 setLed()
			}
	};

	void setLed(bool on) {
		// 点亮指示灯
	}

public:

	void run() {

		std::shared_ptr<ButtonEvent> sp_button_event_ = std::make_shared<ButtonEvent>(this);
		std::shared_ptr<Button> sp_button_ = std::make_shared<Button>(sp_button_event_);
		sp_button_->start();

		while (...) {
		
		}
	}
};

int main()
{
    std::shared_ptr<Business> sp_business = std::make_shared<Business>();
	sp_business->run();
    return 0;
}

你可能感兴趣的:(Linux,应用开发,笔记,c++)