Dynamically loaded libraries 動態載入庫 #3 C++ 類別載入 繼上一篇 Dynamically loaded libraries 動態載入庫 #2 C++ 提到 libdl 是 C 函式庫,不包含類別的功能, 而 C++ 物件導向的特性之一 多形 可以用來達成動態載入類別的功能, 這樣唯一不足的點是, 在要使用動態類別庫的專案中需要加入類別介面標頭, 而不能在讓編譯器完全不知道類別介面的狀況下動態載入。 範例類別庫 以下程式為了節省版面沒有使用 #include 防範 HelloWorld.hpp (介面) class HelloWorld { public: HelloWorld() {} virtual ~HelloWorld() {} virtual void hello() {} }; extern "C"{ HelloWorld* create_object(); void destroy_object(HelloWorld* object); } 會直接實作 HelloWorld 的方法是為了使用上的方便, 不論是不實作或是讓它=0都會有些相對應的問題, 因此我還是將這個 HelloWorld 稱為介面。 create_object 和 destroy_object 兩個函式用於轉發建構子與解構子, 這下就有辦法呼叫其他類別庫中的 HelloWorld 子類別建構子、解構子, 也剛好有 HelloWorld 介面,如此就可以動態載入類別了。 MyHelloWorld.hpp (要被動態載入的類別) #include "HelloWorld.hpp" class MyHelloWorld: public HelloWorld { public: MyHelloWorld(); virtual ~MyHelloWorld(); virtual void hello(); }; MyHelloWorld.cpp #include "MyHelloWorld.hpp" #include <iostream> /* 轉發建構子*/ HelloWor