扫描二维码下载沐宇APP

沐宇

微信扫码使用沐宇小程序

沐宇

c++鎬庝箞瀹炵幇鍙嶅皠鏈哄埗

扬州沐宇科技
2024-01-04 18:17:41
c++

鍦–++涓紝娌℃湁鍐呯疆鐨勫弽灏勬満鍒躲€備絾鏄綘鍙互浣跨敤涓€浜涙妧宸ф潵妯℃嫙鍙嶅皠鐨勫姛鑳姐€?/p>

涓€绉嶅父瑙佺殑鏂规硶鏄娇鐢ㄥ畯鏉ュ畾涔夊拰娉ㄥ唽绫荤殑鍏冩暟鎹€備綘鍙互涓烘瘡涓被瀹氫箟涓€涓畯锛屽湪鍏朵腑娉ㄥ唽绫荤殑鍚嶇О鍜屾垚鍛樺彉閲忋€佹垚鍛樺嚱鏁扮瓑淇℃伅銆傜劧鍚庯紝閫氳繃瑙f瀽杩欎簺瀹忥紝浣犲彲浠ュ疄鐜扮被浼间簬鍙嶅皠鐨勫姛鑳姐€?/p>

浠ヤ笅鏄竴涓ず渚嬩唬鐮侊紝婕旂ず浜嗗浣曚娇鐢ㄥ畯鏉ユ敞鍐岀被鐨勫厓鏁版嵁锛?/p>

#include <iostream>
#include <string>
#include <map>

#define REGISTER_CLASS(classname) \
class classname##Class { \
public: \
    classname##Class(const std::string& name) { \
        ClassRegistry::getInstance().registerClass(name, this); \
    } \
}; \
classname##Class classname##Instance(#classname);

class ClassRegistry {
public:
    static ClassRegistry& getInstance() {
        static ClassRegistry instance;
        return instance;
    }

    void registerClass(const std::string& name, void* classInstance) {
        classes[name] = classInstance;
    }

    void* getClass(const std::string& name) {
        if (classes.find(name) != classes.end()) {
            return classes[name];
        }
        return nullptr;
    }

private:
    std::map<std::string, void*> classes;
};

// 瀹氫箟涓€涓被
class MyClass {
public:
    MyClass() {
        value = 0;
    }

    void setValue(int newValue) {
        value = newValue;
    }

    int getValue() const {
        return value;
    }

private:
    int value;
};

// 娉ㄥ唽绫荤殑鍏冩暟鎹?/span>
REGISTER_CLASS(MyClass)

int main() {
    // 鑾峰彇绫荤殑鍏冩暟鎹苟鍒涘缓瀹炰緥
    MyClass* myObj = static_cast<MyClass*>(ClassRegistry::getInstance().getClass("MyClass"));

    if (myObj) {
        myObj->setValue(42);
        std::cout << myObj->getValue() << std::endl;
    }

    return 0;
}

鍦ㄤ笂闈㈢殑浠g爜涓紝鎴戜滑瀹氫箟浜嗕竴涓?code>REGISTER_CLASS瀹忥紝瀹冧负姣忎釜绫荤敓鎴愪竴涓被闈欐€佸疄渚嬶紝骞跺湪鏋勯€犲嚱鏁颁腑娉ㄥ唽绫荤殑鍚嶇О鍜屽疄渚嬨€傛垜浠繕瀹氫箟浜嗕竴涓?code>ClassRegistry绫伙紝鐢ㄦ潵瀛樺偍鎵€鏈夊凡娉ㄥ唽鐨勭被鐨勫厓鏁版嵁銆?/p>

鍦?code>main鍑芥暟涓紝鎴戜滑閫氳繃璋冪敤ClassRegistry::getInstance().getClass("MyClass")鑾峰彇MyClass鐨勫厓鏁版嵁锛屽苟灏嗗叾杞崲涓?code>MyClass*绫诲瀷鎸囬拡銆傜劧鍚庯紝鎴戜滑灏卞彲浠ヤ娇鐢ㄨ鎸囬拡鏉ユ搷浣?code>MyClass鐨勫疄渚嬨€?/p>

闇€瑕佹敞鎰忕殑鏄紝杩欑鏂规硶鍙兘妯℃嫙鍙嶅皠鐨勯儴鍒嗗姛鑳斤紝骞朵笖闇€瑕佹墜鍔ㄦ敞鍐岀被鐨勫厓鏁版嵁銆傚鏋滈渶瑕佹洿楂樼骇鐨勫弽灏勫姛鑳斤紝鍙兘闇€瑕佷娇鐢ㄧ涓夋柟搴撴垨妗嗘灦銆?/p>

扫码添加客服微信