C++プログラマ キャスブログ
[C++]オーバーロードをするとメンバの順列が変わる 2015年01月22日02:10:12
純仮想関数のみのクラス(インターフェース)を作成しDLLを 通じて実装したクラスのインスタンスの取得を行っていました。
1 2 3 4 5 6 class ITest { public: virtual ~ITest(){}; // デストラクタ virtual void Print() = 0; };
ある日、機能拡張が必要となりインターフェースに オーバーロードしたメソッドを追加しました。 最後部にメソッドを追加すれば、上位互換を保てると思い実施しましたが オーバーロードすると仮想関数の順列が変わるようで失敗しました。
1 2 3 4 5 6 7 8 // オーバーロードを行って上位互換が保てなかった例 class ITest { public: virtual ~ITest(){}; // デストラクタ virtual void Print() = 0; virtual void Print(int i) = 0; };
メソッド名を変更すると上位互換を保ったまま正常に動作しました。 ご利用は計画的に!
1 2 3 4 5 6 7 8 // メソッド名を変更して対応 class ITest { public: virtual ~ITest(){}; // デストラクタ virtual void Print() = 0; virtual void PrintInt(int i) = 0; };
カテゴリ

リンク
C++11のコードを
試すのに便利です。
http://ideone.com/

同人ゲームを
製作している知人
sorcery

にほんブログ村 IT技術ブログ C/C++へ
にほんブログ村


C++ ブログランキングへ

ゲームダウンロード DefenceTri