一つ前の記事で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 件のコメント:
コメントを投稿