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
できました。
[ツッコミを入れる]