空のstringの表し方について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
dom

空のstringの表し方について

#1

投稿記事 by dom » 6年前

ファイルを読み込んでデータを構築してからそのハンドルを返すために以下のような関数を作りました。
対応するファイルを読み込まないときは0(null)を与えます。

コード:

Handle loadFiles(const char* vert,  const char* geom, const char* frag, const char* tess=0);
今、引数がstd::string型の方が便利だと考え以下のように変更したいと思っています。
その場合、対応するファイルを読み込まないようにするためにはどうすれば良いでしょうか。
思いつくのは0の代わりに""なのですが、なんだか恰好悪いので何か良い方法があればお願いします。

コード:

Handle loadFiles(const string& vert,  const string& geom, const string& frag, const string& tess="");

アバター
h2so5
副管理人
記事: 2212
登録日時: 9年前
住所: 東京
連絡を取る:

Re: 空のstringの表し方について

#2

投稿記事 by h2so5 » 6年前

コード:

Handle loadFiles(const string& vert,  const string& geom, const string& frag, const string& tess);
Handle loadFiles(const string& vert,  const string& geom, const string& frag);
このように2種類用意すればいいとおもいます。
それとも途中の引数も省略したいということでしょうか?

dom

Re: 空のstringの表し方について

#3

投稿記事 by dom » 6年前

返信ありがとうございます。
途中の式も含めて考えています。数種類用意する必要がありますがそれも一考してみます。

アバター
h2so5
副管理人
記事: 2212
登録日時: 9年前
住所: 東京
連絡を取る:

Re: 空のstringの表し方について

#4

投稿記事 by h2so5 » 6年前

無理に一つの関数にまとめないほうが良いのでは?素直にこういう実装でもありだと思います。

コード:

Handle loadVertFile(const string& vert);
Handle loadGeomFile(const string& geom);
Handle loadFragFile(const string& frag);
Handle loadTessFile(const string& tess);
[追記]
これだとハンドルが複数になってしまうので、それを回避するならこんな感じにクラスメンバとして実装するという手もあります。

コード:

class Shader {
public:
    void loadVertFile(const string& vert);
    void loadGeomFile(const string& geom);
    void loadFragFile(const string& frag);
    void loadTessFile(const string& tess);
};
[追記]
オプショナルな変数ということであればBoost.optionalなども有りますが、今回の場合は有用ではないでしょう。

アバター
usao
記事: 1566
登録日時: 6年前

Re: 空のstringの表し方について

#5

投稿記事 by usao » 6年前

どのファイルも 読むか読まないかはその時次第 とかであれば

コード:

Handle CreateDefaultData();  //全くファイルを用いない状態でのデータ構築
Handle loadVertFile( Handle, const string& vert);  //Handleで指定されたデータについて VertFile の領分だけを変更
Handle loadGeomFile( Handle, const string& geom);
Handle loadFragFile( Handle, const string& frag);
Handle loadTessFile( Handle, const string& tess);
とかでどうでしょう?

dom

Re: 空のstringの表し方について

#6

投稿記事 by dom » 6年前

これだとハンドルが複数になってしまうので、それを回避するならこんな感じにクラスメンバとして実装するという手もあります。

コード:

class Shader {
public:
    void loadVertFile(const string& vert);
    void loadGeomFile(const string& geom);
    void loadFragFile(const string& frag);
    void loadTessFile(const string& tess);
};

やはりそうなりますよね。元々はclass Shaderのようなものがあり、毎回指定するのが面倒だったので
ヘルパー関数

コード:

Shader*  loadFiles(const string& vert,  const string& geom, const string& frag, const string& tess);
を作ってみたのですが・・・
少し考えてconst char*版の内部で文字列処理してしまおうという結論に至りました。
どうもお騒がせしました。

閉鎖

“C言語何でも質問掲示板” へ戻る