どうもです. 最近はマウス関係のプログラムばかりしているような気がします.
唐突ですが, 今C++の勉強をしています. 自分はあまりプログラムはバリバリ書く方ではありませんし, 一応Cとjavaは少しわかりますがマウスを動かすのに必要な最小限の知識くらいしかありません. なので, 勉強がてらにC++でキレイにマウスのプログラムを書いてみようという感じです.
C++で書くといいかなと思ったもう一つの理由として, マウスのプログラム開発用に作っているソフトをC++で書いているからというのもあります.
C++で開発するメリットと言えばSTLやBoostの存在が一番にあげられます. Cでコードを書くとどうしてもスタックやキュー, 線形リストなどの実装を何度もせねばならずコードが汚くなります. そこで, マウスでもSTLを使おうと思っていろいろ頑張ってみました.
が, 結局使えませんでした...
まあ, でもやったことはブログに書いておこうと思います.
//////////////////////////
開発環境 e2studio
マイコン ルネサスのRX631
//////////////////////////
まず, ルネサスのサイトで情報を収集したところ
http://japan.renesas.com/products/tools/coding_tools/compilers_assemblers/Application_Notes.jsp
アプリケーションノートにSTLライブラリの導入方法のドキュメントとSTLライブラリのソースコードを
発見しました.
このドキュメントはHEWでの設定の方法しか書いていないですが, 設定と言ってもダウンロードしたファイルを解凍してインクルードディレクトリのパスに追加するだけなのでe2studioでも同じことをします.
上にあるプロジェクトのプロパティをクリックし↑のようにたどるとインクルードディレクトリを追加できます.
これで, ソースファイルに#include <vector>と追加してコンパイルをしてみたところどうもエラーが
でます. どうもダウンロードしてきたソース内の_cstddef.h等の複数のヘッダファイルないの
# include _STLP_NATIVE_CPP_C_HEADER(cstddef)
という部分が原因のようなので試しにこの記述をすべてコメントアウトしました. するとコンパイルは通るようになって
#include <vector>
using namespace::std
std::vector<int> v;
と記述してもコンパイルはとおります.
しかし, vectorのpush_back()を使うとコンパイルエラーになってしまいました...
v.push_back(1); //コンパイルエラー
これで, 結構いろいろ頑張ってみてもちゃんとvectorが使えなかったのでe2studioではなくてCS+(Cube suite+??)をダウンロードしてきてSTLを同様にインクルードディレクトリに入れたところ
# include _STLP_NATIVE_CPP_C_HEADER(cstddef)
ではコンパイルエラーをはかず, いけたかなと思ったのですが, 結局vectorのpush_back()は使えませんでした. しかし, push_back()以外の他の関数やstackは使えるようです??
#include <vector>
#include <stack>
using namespace std;
void main(void)
{
std::vector<float> hoge; //コンパイル通る
hoge.push_back(1.0); //コンパイル通らない
std::stack<float> hogehoge; //コンパイル通る
hogehoge.push(1.0); //コンパイル通る
}
いろいろ調べるとiostreamが既存のものとSTLportのもので競合しているのが原因??
かなというところまではわかったのですが, なんか面倒くさいので結局STLの機能のうち必要なものを勉強がてらにTemplateで実装することにしました.
ふう, 疲れましたね.