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

昔VC6でMFC/C++を少しかじったことのある者です。
この度Visual Studio 2010でMFC/C++をやってみようということになりました。
昔作った古いコーディングを参考に、よりC++らしい書き方に改めようとしています。

現在時刻を名前にしたファイルを作成する際、
ファイル名をこれまでは sprintf() を使って、

  char szFileName[11];
  sprintf(szFileName, "%02d%02d%02d.txt", hour, min, sec);

  (*)hour, min, sec のそれぞれに、時, 分, 秒の値が格納されているとする。

ように作っていたのですが、これを iostream な書き方に改めています。
このとき、

  xxx << setfill('0')
    << setw(2) << hour
    << setw(2) << min
    << setw(2) << sec
    << ".txt"

のようにするだろうことは分かったのですが、
恥ずかしながら、この xxx の定義の仕方(変数の型)が分かりません。

ウェブでいろいろ調べてみたのですが、
サンプルコードのほとんどが cout に出力していて、
変数に格納する方法が分かりませんでした。

初歩的な質問ですみませんが、よろしくお願いします。

A 回答 (5件)

MFCならCString::Formatがあります。


これなら、sprintfとほぼ同等のことができます。

MFCではなくC++の標準ライブラリを使うのならsstreamがあります。
「C++編(標準ライブラリ) 第32章 文字列ストリーム」
http://www.geocities.jp/ky_webid/cpp/library/032 …

この回答への補足

早速の回答をありがとうございます。

sstream は、勉強になりました。使えそうです。
実は CString::Format には馴染みがあって、これを使うのが楽です。

社内にはプログラミングができる人間がほとんどいないので、
今回のソースを社内で少しでも参考にしてもれるようにと考えていまして、
そこでよりC++な書き方をしようかと思っているのですが、
どうなんでしょう、素直に Format を使うべきなんでしょうか。

今回のこの iostream の件に限らず、ひとつの処理について、
ランタイムライブラリ, iostream, API 等いろんなアプローチがあるようで、
選択が難しいです。

補足日時:2012/08/23 13:10
    • good
    • 0
この回答へのお礼

いろいろとご教授くださり、ありがとうございました。
大変参考になりました。
C#も勉強してみようと思います。
どうもありがとうございました。

お礼日時:2012/08/23 15:19

WinRTはVisualStudio2012でしか開発できません。

ついでにWindows8でしか開発・実行できません。まぁ、OSの機能が拡張されたので当然なのですが。

>Visual Studio 2010 で新規プロジェクトを作る場合、Visual C++ を選択すると、
>ATL, CLR, 全般, MFC, Win32 などが選択できるのですが、
>このうちどれが該当するのでしょうか。
>もしかすると、Visual C++ でさえないということでしょうか。

VisualStudio2012ではWindowsストアアプリと言う名称でしたね。

一応、C++からは利用できます。ただしC++/CXやらC++AMPやら色々登場して更にややこしい。ネイティブである必然(速度的問題)がないならC#をおすすめします。

http://www.atmarkit.co.jp/fdotnet/chushin/win8ap …
    • good
    • 0

資産・資源の有効活用と言う面から見るとマイクロソフトは短い期間で改変を繰り返すので信用できませんね。

なのでC#やC++/CLIの言語自体は良いとしても.NETはどうなるか不安いっぱいです。

それとWindows8でWinRTと言うものを打ち出して来ていますので、これまた過去資産が活用できません。これはMFCは対応していないのでC++かVB/C#でWinRTで組むしか無いです。

Linux文化で生まれたGTK+やQt(キュート)などのウィジットツールもありますので将来的なことを考えて乗り換えも検討されたほうが良いと思います。ただし日本語資料は少ないんですけどMFCも滅びそうなので。
「Qt キュート」
http://www.sra.co.jp/qt/
LGPL版のサポート無しなら無料で、マルチプラットフォームなのでコンパイルするだけでWin/Linux/Macに対応可能です。

この回答への補足

ご教授ありがとうございます。

> GTK+やQt(キュート)などのウィジットツール
いろいろあるのですね。
参考になります。
将来を見据えて、ちょっと検討してみます。

> これはMFCは対応していないのでC++かVB/C#でWinRTで組むしか無いです。
この場合の C++ とは、どういったものでしょう?
Visual Studio 2010 で新規プロジェクトを作る場合、Visual C++ を選択すると、
ATL, CLR, 全般, MFC, Win32 などが選択できるのですが、
このうちどれが該当するのでしょうか。
もしかすると、Visual C++ でさえないということでしょうか。

度々恐れ入ります...

補足日時:2012/08/23 14:50
    • good
    • 0

将来的にMFCを止めるのならC++の標準ライブラリを使ったほうが良いと思います。


今後もMFCを使うならCStringで構わないと思います。CStringの方が便利なメソッドが多いですからね。

どちらにしてもC++やMFCをちゃんと勉強してもらわないと使えない代物ですので、今後のことを考えて決めて行くべき事です。こちらからはどうしたら良いとは何ともですね。

まぁ、CStringに似たクラスを自分で作れば何とでもなるのでCStringで良いんじゃないでしょうか。

この回答への補足

なるほど。参考になります。

久しぶりに C++ でプログラムを作ることになり、
経験のある MFC か、新たに CLI を勉強するか考えたんですが、
両者共 C++ と名乗っていても中身は随分違っていているようで、
CLI には頭の切り替えが追いつかずに結局 MFC にした次第です。
また、C++/CLI を勉強するなら C# の方がいいという話もありましたので。
(このあたりは、いろいろな考え方があると思いますが。)

仕方のないことでしょうが、開発言語もどんどん進化していき、
「これができる」と思っていたものが、次第に使えなくなっていきますね。

補足日時:2012/08/23 14:08
    • good
    • 0

既に回答がありますが、C++ の標準ライブラリとしては、sstream があります。



#include <sstream>

として、

std::sstream mystream;
で、
mystream << (以下同様)
です。

ただ、mystream は、std::sstream 型なので、char * とは互換性がありません。
mystream.str() で、std::string 型になり、
mystream.str().c_str() でchar* として参照できます。
(ただし、読むだけにした方が良いです)

この回答への補足

早速のご教授ありがとうございます。
No.1の方の補足にも書きましたように、
一つの処理についていろんなやりかたがあって難しいですね。

> mystream.str().c_str() でchar* として参照できます。
>(ただし、読むだけにした方が良いです)
なるほど。ありがとうございます。
確か CString でも同様だったように記憶があります。

補足日時:2012/08/23 13:14
    • good
    • 0
この回答へのお礼

参考になりました。
ありがとうございました。

お礼日時:2012/08/23 15:20

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