2

私は自分の GUI システムに取り組んでおり、デザイン パターンについて助けが必要です。

私の GUI 要素の 1 つは、タイムステップごとに更新する必要があるテキストを持つことができます。ただし、float、int、unsigned int、bool、string など、フレームごとに更新できる (テキスト用の) 変数にはいくつかの種類があります。int を char* に変換するなど、いくつかのことを使用する必要があることは理解していますatoiが、「エレガントな」ソリューションを考えるときに問題が発生します。TEXT_IS_FLOAT、などの複数の列挙型を持ちTEXT_IS_INT、 などの関数SetTextAsFloat(float value)を持ち、オブジェクトをある種の更新ループに置いて、タイムステップごとに aoti などの変換を実行できるようにすることを考えました。そのようにすることに対する私の恐れは、「優れたコード設計」を使用しないことに加えて、多くの異なる値の型をサポートすることで、コードが最終的に非常に面倒に見えることです。

テキストに対して複数のタイプの入力を行うことができるオブジェクトのテキストを更新するシステムをどのように設計できるかについての提案を知っている人はいますか? クラスは潜在的な型付き変数をどのように格納しますか (できればテンプレートなしで)。

4

1 に答える 1

-1

C++ には、ストリームのように機能する STL ostringstream がありますが、ファイルに書き込む代わりに文字列を作成します。次に例を示します。

#include <sstream>  // istringstream, ostringstream, stringstream
#include <string>   // for string objects

using namespace std;  // personally I don't like std::everything...

// returns a string represented what was just updated
string build_value()
{
    int my_int;
    bool my_bool;
    float my_float;
    // the above vars are updated somehow...

    ostringstream s;  // build a string using stream syntax

    // and now the logic

   if (updated_int) {
       s << my_int;
       return s.str();  // this is a string object
   }
   else if (updated_bool) {
       s << my_bool;
       return s.str();
   }
   else if (updated_float) {
       s << my_float;
       return s.str();
   }
}

ヘルパー テンプレート関数を作成することもできます。

template <typename T>
string type_to_string(T t)
{
    ostringstream s;
    s << t;
    return s.str();
}

これは、ストリームが定義されているすべてのタイプで機能します。

于 2012-05-06T20:00:58.233 に答える