dポイントプレゼントキャンペーン実施中!

現在C++ builder(cpp builder 2009を使用)でプログラミングをしています。

ネット接続で端末に接続して、TCPコネクションができたら端末の動作環境の設定値をアップロードできるようにしています。端末の動作環境のデータはenv_tという構造体にしてアップロード時にはこのenv_tの構造体一括で入れて、それをPCの現在作成しているViewerに持ってきています。


その際にある型式の端末では、そのenv_tに追加のデータ分(30byte程度)を追加したものなので、この端末と接続した場合はenv02_tという構造体に切り替えてデータをアップロードしています。



通常はm_pEnv = (env_t *)new env_t;


このように宣言してm_pEnvの構造体にデータを入れてアップロードしていますが、

特定の型式の端末に接続を検知した場合は、

delete m_pEnv;
m_pEnv = (env_t *)new env02_t;


このように変更しています。



このときに問題になっているのが、TCPでのデータがアップロード完了した際に必ずViewer内のデータ表示をアップデートするため次のファンクションを通過します。


void TfrmMain::UpdateEnv(env_t * env)
{

--------(中略)-------------------------


}


このファンクションでは引数がenv_tで固定されてしまっているので、ファンクション内部でenv02_tで追加になったデータ分の扱いができない状況です。

void TfrmMain::UpdateEnv02(env02_t * env)
{

--------(中略)-------------------------


}

このように別途、特定の型式の場合は別のファンクションを作成した方が良いのか困っています。例えば引数をenv_t、env02_tで選べるようにするようなコードの方法などありますでしょうか?

どうぞ、ご教示頂きますようお願い致します。

A 回答 (2件)

関数のオーバーロードは使えませんか?

    • good
    • 0
この回答へのお礼

回答頂きありがとうございます。

Viewer側で

env_t *m_pEnv;


このように宣言していたポインターは


env_02_t *m_pEnv;


これで統一することにしました。


心配していた”env_t *m_pEnv;”これで動作している旧タイプの端末への設定データのアップロード、ダウンロードは設定が消えてしまうというような現象は起きていないことを確認しました。

とりあえずこの設定で使用してみたいと思います。

助かります。

お礼日時:2014/07/31 19:20

オブジェクト指向を活用するなら



UpdateEnvは、t_env, t_env2のvirtualなメソッドとして定義して
m_pEnv->UpdateEnv();
みたいにする。
    • good
    • 0
この回答へのお礼

回答頂きありがとうございます。

Viewer側で

env_t *m_pEnv;


このように宣言していたポインターは


env_02_t *m_pEnv;


これで統一することにしました。


心配していた”env_t *m_pEnv;”これで動作している旧タイプの端末への設定データのアップロード、ダウンロードは設定が消えてしまうというような現象は起きていないことを確認しました。

とりあえずこの設定で使用してみたいと思います。

助かります。

お礼日時:2014/07/31 19:20

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!