#include <iostream> using namespace std; class A { int m_v; public: // Constructor A(int v) { m_v = v; } void Show() { cout << "數值:" << m_v << endl; } }; class B { public: // Constructor B() {} void Show(int v) { static A a(v); // 函數中的靜態變數 a.Show(); } }; int main() { B b1; B b2; b1.Show(1); // 第一次執行會設定靜態變數,往後用的都是同一個 b1.Show(11); b2.Show(2); b2.Show(22); return 0; }
2020年6月24日 星期三
函數中的靜態變數
函數中的靜態變數只在第一次呼叫這個函數才會建立,之後不管呼叫幾次都用的都是同一個,包括成員函數也一樣。如以下的範例:
2020年6月10日 星期三
Template cxxlObjectPlugin 插件
這是個範例,用來示範如何把 template class 做成 cxxlObjectPlugin 插件,下載點:
Template cxxlObjectPlugin.7z
因範例是用 Console 視窗顯示 utf-8 文字,所以先參考 修改 Win10 的 Console 視窗顯示 UTF-8
因 cxxlObjectPlugin 插件須在執行時期經由 CM 在 .cpp 程式中建立,而 template class 則是在編譯時期就須產生物件,解決的辦法是把產生 template class 物件的程式碼帶到 .cpp 中執行。見 Plugin.HPP 中 IPlugin1<T>::Create() 的做法,而在 Plugin.cpp 中 IPlugin1_New() 負責執行以產生 IPlugin1<T> 物件。
一般來說 cxxlObjectPlugin 插件會做成 介面類別 <-- 實作類別 的繼承架構,IPlugin2<T> 就試圖這樣搞,但實作類別會在 .cpp 中,編譯完後早就寫死了,如何去繼承 template 介面類別, IPlugin2<T>::Create() 就試圖這樣搞,但沒成功。
Template cxxlObjectPlugin.7z
因範例是用 Console 視窗顯示 utf-8 文字,所以先參考 修改 Win10 的 Console 視窗顯示 UTF-8
因 cxxlObjectPlugin 插件須在執行時期經由 CM 在 .cpp 程式中建立,而 template class 則是在編譯時期就須產生物件,解決的辦法是把產生 template class 物件的程式碼帶到 .cpp 中執行。見 Plugin.HPP 中 IPlugin1<T>::Create() 的做法,而在 Plugin.cpp 中 IPlugin1_New() 負責執行以產生 IPlugin1<T> 物件。
一般來說 cxxlObjectPlugin 插件會做成 介面類別 <-- 實作類別 的繼承架構,IPlugin2<T> 就試圖這樣搞,但實作類別會在 .cpp 中,編譯完後早就寫死了,如何去繼承 template 介面類別, IPlugin2<T>::Create() 就試圖這樣搞,但沒成功。
訂閱:
文章 (Atom)