2016年6月2日木曜日

ヘッダファイルだけのライブラリを作る。

一つ前の記事でEigenのいうライブラリはヘッダーファイルしかなく、ヘッダーファイルをincludeするだけで使えると書いたんですが、グローバル変数とかってどうやって宣言するんだろう?と気になったので、ヘッダーファイルだけのライブラリの作り方を調べてみました。


どうやら論文書いた人がいるようです。

http://www.res.kutc.kansai-u.ac.jp/~ezawa/grad2001/Yamasaki/honbun.pdf

なるほど。
クラスのstaticメソッドのなかにstatic変数を定義して、その参照を返すのね。


ということで、ヘッダーファイルだけのライブラリのテンプレート作ってみました。
Eigenというライブラリは主にGoogleの人が書いてるっぽいんですが、やっぱGoogle賢いわ。

もうライブラリをコンパイルするなんて時代遅れなのね。
おじさんの頭が、C++の書き方が、時代遅れだったわ。

------------------------------------------------
#include <stdio.h>


class HeaderOnly{

public:
static int& getValueA(){
static int a;
return a;
}
static HeaderOnly& getHeaderOnly()
{
static HeaderOnly he;
return he;
}
public:
int m_b;

};


#if 1
void set_headeronly()
{
int& a = HeaderOnly::getValueA();
HeaderOnly& h = HeaderOnly::getHeaderOnly();

a = 5;
h.m_b = 10;
}

void print_headeronly()
{
int& a = HeaderOnly::getValueA();
HeaderOnly& h = HeaderOnly::getHeaderOnly();
printf("a=%d\n", a);
printf("h.m_b=%d\n", h.m_b);

}

int main()
{
set_headeronly();
print_headeronly();
return 0;
}
#endif


0 件のコメント:

コメントを投稿