#pragma once /** * interface definition * */ #define DECLARE_AS_INTERFACE(CLASS_NAME) \ public: \ virtual ~CLASS_NAME() {} \ protected: \ CLASS_NAME() {} \ CLASS_NAME(const CLASS_NAME&) = delete; \ CLASS_NAME(CLASS_NAME&&) = delete; \ CLASS_NAME& operator=(const CLASS_NAME&) = delete; \ CLASS_NAME& operator=(CLASS_NAME&&) = delete; \ public: