2006-08-21(月) 曇 安静時心拍数 62 [長年日記]
_ プログラミングRuby 第2版 言語編(Dave Thomas/Chad Fowler/Andy Hunt/田和 勝/まつもと ゆきひろ)
満を持しての登場。前著 プログラミングRuby―達人プログラマーガイド(デビット トーマス/アンドリュー ハント/まつもと ゆきひろ/David Thomas/Andrew Hunt/田和 勝)は内容が古いので買うに買えませんでした。 プログラミングRuby 第2版 ライブラリ編(Dave Thomas/Chad Fowler/Andy Hunt/田和 勝/まつもと ゆきひろ)とで2冊に分かれています。
_ はじめてのRuby on Rails―話題の「Webアプリケーション・フレームワーク」が使える! (I・O BOOKS)(清水 美樹)
いくら流行りといえどもRuby on Rails本は出過ぎでは?
_ C言語関数からC++言語メソッドのコールを試す
まず、ヘッダファイルを作ります。
% cat hoge.h #ifndef __HOGE_H__ #define __HOGE_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ extern void get(int ID, double *fuga); extern void set(int ID, double fuga); #ifdef __cplusplus } #endif /* __cplusplus */ #ifdef __cplusplus /** * 普通にC++からも呼べるように用意しておく。 */ class HOGE { public: int get(int ID, double *fuga); int set(int ID, double fuga); }; #endif #endif /* __HOGE_H__ */
次に中味の hoge.cpp
% cat hoge.cpp #include <iostream> #include "hoge.h" int HOGE::get(int ID, double *fuga) { *fuga = 0.1; return 0; } int HOGE::set(int ID, double fuga) { return 0; // 面倒なのでダミー } void get(int ID, double *fuga) { HOGE obj; obj.get(ID, fuga); } void set(int ID, double fuga) { HOGE obj; obj.set(ID, fuga); }
メイン
% cat main.c #include#include #include "hoge.h" int main(int argc, char **argv) { int ID; double fuga; ID = 100; get(ID, &fuga); printf("ID = %d, fuga = %f\n", ID, fuga); return EXIT_SUCCESS; }
ビルドと実行
% g++ -Wall -c hoge.cpp % gcc -Wall -c main.c % g++ -Wall -o c_main hoge.o main.o % ./c_main ID = 100, fuga = 0.100000
期待通りにできました。当然、ピュアなC++からも呼びたい場合でも
% cat main.cpp #include#include "hoge.h" int main(int argc, char **argv) { int ID; double fuga; ID = 100; HOGE hoge; hoge.get(ID, &fuga); std::cout << "ID = " << ID << ", fuga = " << fuga << std::endl; return 0; }
ビルドと実行
% g++ -Wall -c hoge.cpp % g++ -Wall -c main.cpp % g++ -Wall -o cpp_main hoge.o main.o % ./cpp_main ID = 100, fuga = 0.1
できました。