templateで作った変数をシリアライズする方法がわからなくて困っています。

例えばhogehogeという変数を用意します。これはtemplateで
hogehoge<TYPE>として、型はint、double、char[]、wchar_t[]
のいづれかを取れるようにします。

この変数hogehogeをシリアライズしてファイルに保存したいのです。
シリアライズするには、int又はCObject*又はCString型にいったん
キャストしてからシリアライズすることになると思うのですが
ここで、hogehogeという変数がどの型になっても問題なくシリアラ
イズできるようにするにはどうしたらいいのでしょうか?

A 回答 (1件)

「hogehogeという変数」の意味が今ひとつ不明ですが、次のようなことですか?


また、シリアライズについては、何か特別な形式を想定しているのでしょうか、または、任意の形でよいのでしょうか。

template <class T>
class hogehoge {};

int main() {
hogehoge<int> hi;
hogehoge<double> hd;
cout << hi << hd; // シリアライズ
return 0;
}
    • good
    • 0

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

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

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

Qシリア難民が自由を勝ち取る為に

ポーランドの新外相が、「シリア難民を訓練して祖国解放軍に」と提案してるようですが、シリア難民が自由を勝ち取るためには何が必要ですか。

Aベストアンサー

>ポーランドの新外相が、「シリア難民を訓練して祖国解放軍に」と提案してるようですが、

なかなか良い提案ですね。

>シリア難民が自由を勝ち取るためには何が必要ですか。

やはり祖国を奪還しなくっちゃ、いろんな国で迫害されるでしょう。ユダヤ人が良い例です。
そのためには世界に散らばったシリア難民に呼びかけて一致協力し、祖国を真っ当な国にすることですね。

Qシリアライズの考え方

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

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

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

Aベストアンサー

シリアライズ(直列化)は一般的と言っていいでしょうね。
オブジェクトおよびその集合をシリアライズすることで、
通信線を介して送信/受信したり、ファイルに書き込み(保存)/読み込み(復元)したり。

Qなぜ 今シリアの難民問題なの?

シリアの内戦状態になってもうだいぶ立ちますよね?

過去すでにトルコなどへ難民は相当押し寄せていました。

ここにきてなぜ難民が皆ドイツなどへ大量に移動したのでしょうか?

何がキッカケで難民問題が浮上したのでしょうか?
何かシリア国内で起こったのでしょうか?

Aベストアンサー

>トリガの移動が、なぜ今あったのか?

http://www.abc.net.au/7.30/content/2015/s4305801.htm
2:50 - 4:00
近いうちに内戦が終わって、自国に帰れると思ってレバノンとかトルコのような近隣の国のキャンプに一時的のつもりでいたが、自国の状況が改善される気配がない。自国に帰ることをあきらめて外国で暮らすことに決めたが、そうなるとasylumのサポートシステムがしっかりしている先進国のほうがいい。というわけで、ここにきてトルコとかレバノンの難民キャンプからヨーロッパに向かう難民が出始めた。

というのがUNHCRの見方です。

なぜ今年で、去年じゃなかったのかというのは誰もわからないでしょう。内戦が長引けばいつかはこうなったはずで、それがたまたま5年目の今年だったということなんじゃないでしょうかね。

QC/C++言語で変数名から変数のアドレスを取得する方法があれば、ご教示願います。 例えばですが、関数

C/C++言語で変数名から変数のアドレスを取得する方法があれば、ご教示願います。

例えばですが、関数GetProcAddress()は、関数の文字列からエクスポート済みの関数のアドレスを戻り値で返しています。
GetProcAddress()と同じようにアドレスを取得したい変数名の文字列を渡して、変数のアドレスを取得したいです。

よろしくお願いします。

Aベストアンサー

無理です。

C/C++ はコンパイルした時点で変数名は捨てられて自動採番の識別子に置き換えられるので。

ただし、「どうしても変数名から」というときのために「マクロ引数の文字列化」を巧みに利用してそれらしい挙動をさせるためのコードはよく見ます。
詳しくはググってください。

参考になればよろしいんですが。

Qシリア難民はアラブの裕福な国ではなくヨーロッパに行くのはなぜですか?

なぜシリア・イラクの難民はアラブの裕福な国ではなくヨーロッパに行くのですか?

ふと、不思議に思ったのですが、アラブにはサウジアラビアやUAEなどの裕福な国がたくさんあると思うのですが、シリア・イラクの難民は裕福なアラブの国ではなく、宗教・民族の異なるヨーロッパに行くのでしょうか?

同じアラブ民族、同じ宗教の国の方が住みよいということはないのでしょうか?

アラブの国々は同じイスラム教でも宗派が異なるからでしょうか?

すみませんが、お教えくださいますよう、お願いします。

Aベストアンサー

多くの人がいい加減な知識を植え込まれていますけど、
第一にイスラム教は各宗派ごとに排他的な立法で成り立っていると思ってください。イラクがなぜフセインを失った後乱戦状態になったかといえば主たる教派がなくなったからですよ。あまりにも世界(特にアメリカ)はイスラムを知しらな過ぎたということです。
他宗派のイスラム国、また同じ派閥でも国が違えば立法も異なることから排他的になる。そんなところにいけば下手すると奴隷扱いになってしまいます。だからヨーロッパに行こうとするのが一つの要因。

もう一つは実は難民として国外に出ているのは比較的裕福層だということ。貧困層は国外に出る手段もありません。要するに職探しのための難民。だから北欧は寒いから嫌だとか不満が出せる。仕事を探しているのだから国民との間にいざこざが起きる訳です。

日本もバカだから、難民と移民と亡命の違いすら理解できないでいる。
亡命はほぼ個人的に迫害を受けており、その国の国民になるために逃げてきている。
移民もその国に移住することが目的。だから国民になり働くことも出来る。
難民は移住者ではありません。国が安定すれば帰国させられるのです。だから基本的には就労目的ではない。
逆に受け入れた国は本国の安定に寄与しなければなりません。
つまり日本が難民を受け入れるためには少なくとも国連軍として積極的に参加しなければならないのです。これは国連が定めた集団的自衛権に当たるからです。集団的自衛権を行使しないのであれば、国連を辞めるしかありません。
しかし日本のマスコミは意図して難民と移民をゴチャにしている。実際に北欧の国では移民が多くなりすぎて既存の国民に不利な法案が通り始めている、つまり国を乗っ取られてしまっている訳です。
日本ではまだ起きてはいませんが、既に東京近郊のマンションでは管理組合の言語を中国にしろという提案が出たり、セキュリティをやめさせられるなどがおきています。今はマンション単位ですが、やがて町単位、沖縄のように県単位で乗っ取られる可能性だってあり、最終的には北欧の某国のように国が乗っ取られるでしょう。

多くの人がいい加減な知識を植え込まれていますけど、
第一にイスラム教は各宗派ごとに排他的な立法で成り立っていると思ってください。イラクがなぜフセインを失った後乱戦状態になったかといえば主たる教派がなくなったからですよ。あまりにも世界(特にアメリカ)はイスラムを知しらな過ぎたということです。
他宗派のイスラム国、また同じ派閥でも国が違えば立法も異なることから排他的になる。そんなところにいけば下手すると奴隷扱いになってしまいます。だからヨーロッパに行こうとするのが一つの要因。

...続きを読む

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();

といった具合です

Qシリア難民 受け入れ賛成or反対?

シリア&北アフリカの難民問題、

シリア国民2000万人中半数の1000万人(東京都の人口並)が難民化し、内700万人が国内に留まり、300万人が国外脱出し、内30万人がEUに行き着いたそうです。

シリアといえばミシュウィ(焼肉)が美味しいですが、ムスリム料理なんて、あまり日本人には聞いたことがないと思います。

韓国家庭料理が新宿では普通にありますけど、全国的には少ないと思います。
日本に60万人も在日韓国人がやっていけるので、同じ程度の中国人もいます。
かれらは決まって中華料理で生計立てています。

同じように、ムスリム料理でシリア人もなんとかやっていけるのでは?と思いますが、一箇所に住まわすとコミュニティーは成立するでしょうけど、生計は立たないろ思います。

各自治体に1家族で、移民ファンドで日銀が資金を貸し出し商売させる案で、受け入れてはどうでしょうか?

Aベストアンサー

難民を受け入れざるを得ない理由の一つが密入国だ。
つまり 放っておいても勝手に入ってきてしまうとどこの誰だかさっぱりわからず 受け入れ先も犯罪組織となるから治安の悪化がひどい。
そうなると「それよりはしっかり身元を確認して 監視のもとで管理したほうが安全では」となる。
決して人道的な理由だけではない。

もともと日本は外国人の長期滞在が難しく 難民認定の方法しか今のところない。
これだとほぼ無条件で日本人と同じ権利と義務が発生する。(永住権 難民旅行証明書(パスポート) 年金 児童扶養手当 福祉手当など)
そうすると生活保護の権利も入るので あっという間に国民や自治体の負担が増える可能性がある。
例え1年以上の特定活動のビザしか受けられなくとも 日本の場合は他の手当や保留で対応できるので 多くの人間が職もなく暮らすハメになる。
最低賃金などが厳しく決められている日本では学歴も会話もできない者を企業も正社員として雇わない。
定職につくのは難しい。
そうなると治安の悪化と社会の混乱 そして国民への税金の負担が大きくなる。
だから実際問題として現状ではこの国では多くの難民受け入れは不可能だ。

本来なら「3年難民ビザ」などを作って管理すれば出来ると思う。
難民だからある程度の緩和は必要としても
・素行が善良であること。
・日本国憲法 又はその下に成立した政府を暴力で破壊することを企て、若しくは主張し、又はこれを企て、若しくは主張する政党その他の団体を結成し、若しくはこれに加入したことがないこと。
くらいの縛りで
DNAと指紋 顔写真を撮り 健康診断とレントゲンによる撮影 20歳以上にはGPS付の携帯電話を支給し 常時携帯を義務付ける。
犯罪者のような扱いとも言われようが イスラム国の者が紛れ込む危険だって考えなければならない。
これくらいやって初めて10000人規模でもなんとか可能だと思う。 

安直な受け入れは決して双方にとって幸せではないはず。
質問者は商売が簡単に成り立つと思っているのだろうか。
日本人にだって簡単ではない。
まずは地域コミュニケーションとスキルの獲得 そして肉体労働の指導からだ。

・・・まあこの国の政府は動乱に弱いからなあ。
難民のために動くことが将来の外国人受け入れに役に立つ なんて役得もそんなにない道筋を立てる政治家もそうはいないだろうし。
実際は「特殊団体」とかが船で500人とか連れて来ちゃえば受け入れざるをえないのだろうけどね。

難民を受け入れざるを得ない理由の一つが密入国だ。
つまり 放っておいても勝手に入ってきてしまうとどこの誰だかさっぱりわからず 受け入れ先も犯罪組織となるから治安の悪化がひどい。
そうなると「それよりはしっかり身元を確認して 監視のもとで管理したほうが安全では」となる。
決して人道的な理由だけではない。

もともと日本は外国人の長期滞在が難しく 難民認定の方法しか今のところない。
これだとほぼ無条件で日本人と同じ権利と義務が発生する。(永住権 難民旅行証明書(パスポート) 年金 ...続きを読む

Qint型変数をchar型変数に格納する方法

int型数値をchar型変数に格納したいのですが、
sprintf()とatoi()を用いてやりましたが、
うまくいきません。
考えたコードを下記します。

int get_y(){

int y=2005;

return y;
}

int main(){

char year;
char str[5];

//intをcharに変換して格納している
sprintf(str,"%d",get_y());

//数値として代入
year=atoi(str);

//yearには2005が格納されていない!
cout<<year<<endl;


char ans; //このchar型変数に数値を代入する。

ans=year;

cout<<ans<<endl;

return 0;

}


お手数をお掛けしますが、
よろしくお願い致します。

Aベストアンサー

私にも2005が6を返すと言う意味が分かりません。

char型は先の説明にある通り、-128~127までしか、値を入れる事は出来ません。
char yearに127を格納すれば、127と出ますが、128と入れれば、ぐるっと一周して-128となってしまいます。
それで言うと、2005を代入すると、グルグルと周って-43と出ます。それならまだ分かるのですが・・・

32ビット環境で、符号付きで考えたとき、
char 1バイト(-128~127)
short 2バイト(-32768 ~ 32767)
int 4バイト(-2147483648 ~ 2147483647)
までしか入れられない。と言う事はお分かりでしょうか?

2005と言う数値をどんなにキャストしようが、char型の変数にその値を格納する事は出来ません。

get_y()が返す値を-128~127の値になるようにするか、yearをcharでは無く、shortやint型に素直に変更する必要があります。

2005をどうしてもcharに格納したいのなら、それは不可能です。

私にも2005が6を返すと言う意味が分かりません。

char型は先の説明にある通り、-128~127までしか、値を入れる事は出来ません。
char yearに127を格納すれば、127と出ますが、128と入れれば、ぐるっと一周して-128となってしまいます。
それで言うと、2005を代入すると、グルグルと周って-43と出ます。それならまだ分かるのですが・・・

32ビット環境で、符号付きで考えたとき、
char 1バイト(-128~127)
short 2バイト(-32768 ~ 32767)
int 4バイト(-2147483648 ~ 2147483647)
までしか入れられ...続きを読む

Qシリアが今、難民が100万人を超えました。

シリアが今、難民が100万人を超えました。 あなたは募金しますか?
https://www.japanforunhcr.org/syria/?utm_source=google&utm_medium=re&utm_campaign=syria_special

Aベストアンサー

現在、日本は、6500万ドルの追加支援を検討しているようです。

(4)我が国は,シリア及び周辺国への人道支援として,約65百万ドルの追加支援を行うことを検討している旨の発表を行った。


国民の代表である政府として検討をおこなっていますので個人的な募金はしません。

参考URL:http://www.mofa.go.jp/mofaj/area/syria/kaigi/jindoushien_20130131.html

Qtemplateクラス中のtypedef enumを戻り値にする方法

こんにちは、VisualStudio2003でtemplateの使い方の学習中です。
言葉で書くと難しくなりますのでソースを書きます。
<h>
template<class MYTYPE> class CTreeMng
{
public:
CTreeMng(void);
~CTreeMng(void);
typedef enum {
SUCCESS// 成功
} RESULT;
RESULT SetPotision( NODE_POSITION pos );
};
<cpp>
template<class MYTYPE> CTreeMng<MYTYPE>::CTreeMng(void){}
template<class MYTYPE> CTreeMng<MYTYPE>::~CTreeMng(void){}
template<class MYTYPE> CTreeMng<MYTYPE>::RESULT CTreeMng<MYTYPE>::SetPotision( ){}
---------------------------------------------------------
上記の場合、
template<class MYTYPE> CTreeMng<MYTYPE>::RESULT CTreeMng<MYTYPE>::SetPotision( )
が、以下エラーとなります。
TreeMng.cpp(31): warning C4346: 'CTreeMng<MYTYPE>::RESULT' : 依存名は型ではありません。
仮に、
template<class MYTYPE> RESULT CTreeMng<MYTYPE>::SetPotision( )
でも、
TreeMng.cpp(31): error C2143: 構文エラー : ';' が 'CTreeMng<MYTYPE>::SetPotision' の前にありません。
となります。
正しい書き方は、どのように書けばよろしいのでしょうか?
アドバイスお願いします。

こんにちは、VisualStudio2003でtemplateの使い方の学習中です。
言葉で書くと難しくなりますのでソースを書きます。
<h>
template<class MYTYPE> class CTreeMng
{
public:
CTreeMng(void);
~CTreeMng(void);
typedef enum {
SUCCESS// 成功
} RESULT;
RESULT SetPotision( NODE_POSITION pos );
};
<cpp>
template<class MYTYPE> CTreeMng<MYTYPE>::CTreeMng(void){}
template<class MYTYPE> CTreeMng<MYTYPE>::~CTreeMng(void){}
template<class MYTYPE> CTreeMng<MYTYPE>::RESULT CTreeMng<MY...続きを読む

Aベストアンサー

 こんばんは。

 ×template<class MYTYPE> CTreeMng<MYTYPE>::RESULT CTreeMng<MYTYPE>::SetPotision( ){}
 ↓
 ○template<class MYTYPE> CTreeMng<MYTYPE>::RESULT CTreeMng<MYTYPE>::SetPotision(NODE_POSITION pos){}

 余談ですが、実の所、テンプレートはヘッダーのみに書くものです。


人気Q&Aランキング

おすすめ情報