MS VC++ を見ると、シリアライズということばが頻繁に現れるのですが、シリアライズの思想が良くわかりません。

・シリアライズの目的は?
・シリアライズのメリットは?なぜMSはこういうものを用意したの?
・MSが考えた概念なのでしょうか?一般的な概念なのでしょうか?(GNU GCCなどでこういったものは用意されているのでしょうか?)

よくわかってないので変なことを聞いているかもしれませんが、よろしくお願いします。

A 回答 (5件)

シリアライズ(直列化)は一般的と言っていいでしょうね。


オブジェクトおよびその集合をシリアライズすることで、
通信線を介して送信/受信したり、ファイルに書き込み(保存)/読み込み(復元)したり。
    • good
    • 0
この回答へのお礼

なるほど。ありがとうございます。

もともと一般的概念としてあるけど、C++のライブラリとして用意してくれているのは Microsoft だけ、ということでしょうか?

お礼日時:2003/03/13 21:31

> 一番ありがたいのは、GNU の C++ で使えるクラスライブラリです。



何をしてくれるクラスライブラリですか?
    • good
    • 0
この回答へのお礼

自分自身よくわかっていないので、おっしゃっていることを勘違いして質問してしまっていたようです。すみません。
質問にさえなっていない状態のようなので、もう一度、本屋に行って自分で調べまくります。

お付き合いいただいてありがとうございました。

お礼日時:2003/03/14 11:27

> この情報の参照先を教えていただけないんでしょうか?



何の情報?
    • good
    • 0
この回答へのお礼

>シリアライズあるいはPersistency(永続性)をサポートする
>クラスライブラリはいくらでもあります。

の「クラスライブラリ」(MS VC++についている以外の)です。
一番ありがたいのは、GNU の C++ で使えるクラスライブラリです。

お礼日時:2003/03/14 10:58

> Persistency とは何でしょうか?言葉の響きはずいぶん違うのですが、シリアライズの一般化でしょうか?



Persistency(永続化)はオブジェクトの保存/復元メカニズムです。そのひとつがシリアライズ。
    • good
    • 0
この回答へのお礼

ありがとうございます。
もしよかったら、

>シリアライズあるいはPersistency(永続性)をサポートする
>クラスライブラリはいくらでもあります。

この情報の参照先を教えていただけないんでしょうか?

お礼日時:2003/03/14 09:17

> もともと一般的概念としてあるけど、C++のライブラリ


>として用意してくれているのは Microsoft だけ、ということでしょうか?

Microsoft'だけ'とする根拠はなんですか?
シリアライズあるいはPersistency(永続性)をサポートするクラスライブラリはいくらでもあります。
    • good
    • 0
この回答へのお礼

> Microsoft'だけ'とする根拠はなんですか?

すみません。
わたしは、gnu の g++ と 昔の Borland のと最近の Visaul C++ しか使ったことがないのですが、目だったところでは MS のしか聞いたことがなかったので、以前は概念としてとしか存在しなかったものを MS が実装した、ということかなと思ったのです。

Persistency とは何でしょうか?言葉の響きはずいぶん違うのですが、シリアライズの一般化でしょうか?

お礼日時:2003/03/13 23:00

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qgccやg++がGNU製かどうかの確認法は?

初心者質問で失礼致します。

各UNIX上でgccやg++がGNU製のものかどうかは何処で確認できるのでしょうか?

% gcc -v
Reading specs from /usr/local/lib/gcc-lib/sparc-sun-solaris2.6/2.95.3/specs
gcc version 2.95.3 20010315 (release)
% g++ -v
Reading specs from /usr/local/lib/gcc-lib/sparc-sun-solaris2.6/2.95.3/specs
gcc version 2.95.3 20010315 (release)

となりましたがGNU製なら"GNU"と表示されるのでしょうか?

Aベストアンサー

GNU製のソフトは、著作権を放棄しているわけではないので、

gcc,g++と言えばGNU製と考えていいと思います。
そうしたオリジナルのソースを利用したソフトについても、GNU使用許諾が適用されるので、そうした意味では"GNU製"と考えてイイかも。

元のgccを改変したプログラムの場合、
おそらく、-vなどのヴァージョン表示でその旨が記載されていると思います。

Qシリアライズ関数でのReadStringは読み直しができない?

VC++6.0でMFCを使ってのCSVファイル入力を検討しています。
シリアライズ関数内でReadStringを使って1行づつ入力しているのですが、ファイル終端に達した後の処理として、もう一度ファイル先頭から読み直しをしたいのですが、うまくいきません。どうすれば、読み直しができるのでしょうか?
処理の流れは次のようにしました。
void CDispDoc::Serialize(CArchive& ar)
{
CStringline;
if (ar.IsStoring())
{
}
else
{
while(ar.ReadString (line)) {   何かの処理  }
//whileを出たところでファイル先頭からの読み直しをしたい

次の2点を試したのですが、うまくいきません。
(1)ファイルポインタを戻してから入力する。
CFile* fp = ar.GetFile ();
fp->SeekToBegin ();
ar.ReadString (line);//この方法ではFalseが戻る

(2)新たなArchiveオブジェクト作って使う。
CFiletheFile(ar.GetFile()->GetFilePath (), CFile::modeRead);
CArchive arc(&theFile, CArchive::load);
arc.ReadString (line);//この方法では共有違反と言われる

ReadStringでは読み直しができないのでしょうか?

VC++6.0でMFCを使ってのCSVファイル入力を検討しています。
シリアライズ関数内でReadStringを使って1行づつ入力しているのですが、ファイル終端に達した後の処理として、もう一度ファイル先頭から読み直しをしたいのですが、うまくいきません。どうすれば、読み直しができるのでしょうか?
処理の流れは次のようにしました。
void CDispDoc::Serialize(CArchive& ar)
{
CStringline;
if (ar.IsStoring())
{
}
else
{
while(ar.ReadString (line)) {   何かの処理  }
//while...続きを読む

Aベストアンサー

共有違反はCDocuemntクラスのOnOpenDocument関数で
CFile::shareDenyWriteで開いているためだと思われます

Serializeの引数 arかCFileオブジェクトを取得してこのファイルオブジェクトを操作してからCArchiveを再構築するといった手順でしょう

CFile* pFile = ar.GetFile();
pFile->SeekToBegin();
CArchive arc( pFile, CARchive::load );
arc.ReadString( line );
arc.Close();

といった具合です

QMS-VisualC++:コンパイル後実行をするとDOS窓が一瞬だけ現れて消えるのをずっと表示させたいのですが。

cout << t << endl;

return 0;

}

単に変数を画面に表示させるだけのプログラムなのですが、Build後、実行すると一瞬DOS窓が立ち上がり表示された後すぐ消えてしまいます。この表示したDOS窓を持続させたいときはどうすればいいのでしょうか。おそらくものすごく基本的なことなのでしょうが、Linux上でしかC++をしてないのでわかりません。

Aベストアンサー

!マークのボタンを押して実行したら、

Press Any Key

って出てきて止まりませんでしたっけ?

QCException についてVC6とVC2005とのコンパイルの違い

こんにちわ、お世話になります。

現在、Windows XPにて、VC++6.0からVC++2005へと
あるソフトの移植をしているのですが、
CException についてコンパイルエラーが出ています。
試しに、
--
CException* pException = new CException;
delete pException;
--
の様な文を書いて、VC++6.0とVC++2005とでコンパイルを
比較してみました。

すると思惑通り、VC++2005でだけ、以下の様なエラーが
出てしまいます。
--
error C2259: 'CException' : 抽象クラスをインスタンス化できません。
1> 次のメンバが原因です:
1> 'CException::~CException(void)' : は抽象型です
--

ヘルプを見てもエラーが出るのは納得なのですが、
それならなぜVC++6.0の時には出なかったのでしょうか?

以上、よろしくお願い致します。

こんにちわ、お世話になります。

現在、Windows XPにて、VC++6.0からVC++2005へと
あるソフトの移植をしているのですが、
CException についてコンパイルエラーが出ています。
試しに、
--
CException* pException = new CException;
delete pException;
--
の様な文を書いて、VC++6.0とVC++2005とでコンパイルを
比較してみました。

すると思惑通り、VC++2005でだけ、以下の様なエラーが
出てしまいます。
--
error C2259: 'CException' : 抽象クラスをインスタンス化できません。
1> ...続きを読む

Aベストアンサー

> そう思って afx.h を見てみたのですが、VC++6.0、VC++2005とも
> virtual となっていました。

VC++2005のほうは、デストラクタが純粋仮想関数になっていませんか?
(=0がついていませんでしたか?)

QVC++6.0からVC++.NETへの変遷について

VC++がようやく分かり出したこの頃ですが、今日本屋に立ち寄ったら、なっ なんとVC++の本がほとんど無くなり、代わりにVC++.NETとVC#ばかりになっていました。

C#はVC++とは違うと聞いていたのですが、読んでみるとVC++.NETもかなり違ってました。
(かなり違うという表現は、各人の状況により意見が異なると思いますが)

私のような本を見ながらコードを打って勉強している初心者にとって、VC++.NETの本ではVC++6.0を動かすことができません。

今から勉強する人や本を買って勉強しようとしている人あるいは、コンパイラを手に入れようとしている人はVC++.NETに移行してしまわざるを得ないのでしょうか?

すでにVC++6.0を十分活用出来ている人も、時代の流れでNETやC#を勉強していかなければならないのでしょうか?

つまり、単なるバージョンアップとは一線をなす変更がなされたということなのでしょうか?

良くご存知の方見解をお願いします。

Aベストアンサー

すぐにではありませんが、.NETに移行せざるを得なくなるでしょうね。
ただ、開発環境という面では、VS.NETにはC++が含まれており、C++の部分は
従来のC++も利用できるようになっていて、これはアンマネージC++と呼ばれています。
C++で.NETのコードを作成する時は、マネージC++という拡張仕様で記述します。
また、従来のコードと.NETフレームワーク用コードを混在させてアプリケーションを
開発することもできます。これは、相互運用という形で説明されています。

ということですので、C++で習得したものが無駄になることはありません。
たぶん、.NET環境の開発には、C++よりもC#やVB.NETを利用することが
多くなると思いますが、C++を理解していることはプラスにはなってもマイナスには
なりませんので、頑張って下さい。

.NET関連のサイトを2つご紹介しておきます。ご参考に。
http://www.microsoft.com/japan/msdn/library/default.asp
http://www.atmarkit.co.jp/fdotnet/index.html

すぐにではありませんが、.NETに移行せざるを得なくなるでしょうね。
ただ、開発環境という面では、VS.NETにはC++が含まれており、C++の部分は
従来のC++も利用できるようになっていて、これはアンマネージC++と呼ばれています。
C++で.NETのコードを作成する時は、マネージC++という拡張仕様で記述します。
また、従来のコードと.NETフレームワーク用コードを混在させてアプリケーションを
開発することもできます。これは、相互運用という形で説明されています。

ということですので、C++で習得したもの...続きを読む


人気Q&Aランキング

おすすめ情報