コンピュータプログラミング言語調節可能おしゃれキャップ
C++(シープラスプラス) コンピュータ プログラミング言語 男女兼用 メンズ レディース 調節可能 おしゃれ キャップ カジュアル ファッション 帽子 野球帽
| 固定リンク
| コメント (0)
| トラックバック (0)
C++(シープラスプラス) コンピュータ プログラミング言語 男女兼用 メンズ レディース 調節可能 おしゃれ キャップ カジュアル ファッション 帽子 野球帽
| 固定リンク
| コメント (0)
| トラックバック (0)
gcc4.6ではC++11がうまくコンパイルできませんでしたので、gcc 4.8にバージョンアップしてみました。
sudo apt-get install gcc-4.8
で、こいつをg++コマンドと関連付ける
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.6 10 sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 20
これで、/etc/alternatives/g++が/usr/bin/g++-4.8にリンクされる。
で、コンパイラオプションに-std=c++11と、いつもつけるのが面倒くさいからエリアスを設定する。
echo "alias g++11='g++ -std=c++11'" > /home/pi/.bash_aliases
これで、g++11とするとC++11モードでコンパイルできる筈。
g++11 main.cpp -o test.exe
こんな感じでどうかな?
| 固定リンク
| コメント (0)
| トラックバック (0)
ちなみにatoiなど標準ライブラリーなどの関数を使うべきですが、純粋に文字列をint型にするのではなく、なにか似たような処理をする時のヒントになればと思います。
文字列の先頭から一文字取得して、数字に変換する。取得した文字を文字列から取り除く。文字列にまだ文字があれば、取得した数値を10倍する。
#include <iostream> #include <string> using namespace std; int string_to_int(string s) { int result = 0; while (s.length() != 0) { result += s[0] - '0'; s = s.substr(1, s.length() - 1); if (s.length() != 0) { result *= 10; } } return result; } int main() { string s = "123"; cout << string_to_int(s) + 111 << endl; // 234 return 0; }
| 固定リンク
| コメント (0)
| トラックバック (0)
オブジェクトを返すとか、例外を投入するだけでインライン化できない関数だが、既存関数の引数が固定のラッパー関数とかで、ループの中で頻繁に呼び出されたりするような関数を用意したいことがある。
だったら、マクロ化しまうのもひとつの手かと。
大量の引数を取る関数が何度も呼ばれるような場合で、呼び出しごとに変化する引数はひとつだけだというような場合には、他の引数は固定しておく事ができる。しかしラッパー関数を作ってしまうと、ラッパー関数の呼び出しと、ラッパー関数から呼ばれる本質の関数を呼び出すという、一度の関数呼び出しで二度ずつオーバーヘッドが発生する。子のオーバーヘッドが無視できれば、関数にしておいた方がソースの可読性は向上すると思うが、オーバーヘッドが無視できないようなケースではマクロ化してしまえば、オーバーヘッドを回避することができる。
C++ではマクロよりインライン関数を使うべきという説をよく見るので、インライン化できないと通常の関数化してしまいがちだが、普通にC言語のようにマクロ化してしまった方が有効な場合もある。
style="display:inline-block;width:300px;height:250px"
data-ad-client="ca-pub-1099589974703718"
data-ad-slot="4338286575">
| 固定リンク
| コメント (0)
| トラックバック (0)
バーコードを利用したアプリケーションなどでユーザーがコンピュータの扱いに慣れていないと、何かの拍子にフォーカスがTEditなどから外れていても、構わずにバーコードを読んでしまって、よく確認をしていないために入力した筈のデータが抜け落ちてしまうというような事が起こります。
色々と考えてみたのですが、TForm::KeyPreviewをtrueにして、すべてのキー入力をTEditに投げるという事も考えたのですが、ちょっと違う方法を取ってみた。
フォームにTEditとTRadioButtonを置いてテストしてみます。これは、入荷と出荷などモードを切り替える時によく使うと思うので、TRadioButtonにしてみました。
// TRadioButtonのOnKeyPressイベント void __fastcall TForm1::RadioButton1KeyPress(TObject *Sender, wchar_t &Key) { ActiveControl = Edit1; Edit1->Text = Edit1->Text + Key; Edit1->SelStart = Edit1->Text.Length(); }
こんな風に別のコントロール(ここではTRadioButton)のOnKeyPressイベントでActiveControlをTEditに変更してTEdit::Textの末尾に入力された文字を結合します。
次に入力される文字を適切な場所に入力させるには、入力した文字列の末尾にキャレットがある必要があるので、TEdit::SelStartに文字列長を指定します。
これでTRadioButtonのTabStopをtrueにしておきTRadioButtonをクリックするなり、タブで移動するなりしてアクティブにしておき、そのままの状態でキーを入力するとTEditに入力されます。
TRadioButtonはいくつかの選択肢の択一なので、TRadioButtonを複数用意してみましたが、RadioButton1を選択して、矢印キーの上下で選択肢を移動しても選択の動作には影響はありません。OnKeyPressは文字以外はVK_ESCAPE、VK_RETURNや'\t'(TAB)くらいしか捕捉しないので、矢印やCtrl、Alt、Shiftなどではイベントが発生しないので、それなりにうまく動くようです。
逆に言うと、文字やVK_RETURNを受け取る必要があるようなコントロールに対しては工夫が必要かもしれません。
ちょっとテストした感じでは上手く動作しているようです。必要なら文字単位でフィルターを掛けるなどして、数字だけをTEditに転送するなどの処理をするといいかも知れません。
| 固定リンク
| コメント (2)
| トラックバック (0)
TUpDownのAssociateにTEditを割りててたんですが、位置合わせのために再度AssociateにTEditを割り当ててやると、TEditのTextがTUpDownのPositionになるという事を知らずに、Edit1->Text = 10; とかしてた物がAssociateのタイミング?で、Edit1のTextが30とかになってしまう。
これだけじゃないけど、これをメインに色々とハマって1日無駄にしてしまった。
Delphi、C++BuilderではiPhone, Androidアプリ作成の話題で持ちきりですが、C++ Builder 2010でWebBrokerのWebサーバーアプリケーションプロジェクトでCGIを作らなければならなくなったので、やってみたのですが、わからない事だらけだしヘルプには記載がない物ばかりだし。
まず、デフォルトの文字コードがShift_JISなのかな?UTF-8にしたかったのですが、Response->ContentにUTF8String型の文字列を渡してやってもダメなんですね。
Response->ContentType=”text/html; charset=utf-8”;
ってしてやる必要があります。で、
Response->Content = UTF8String(PageProducer1->Content());
でUTF-8で出力する事ができるようになったのですが、HTMLのFORMから投げられる文字列の文字コードがUTF-8だと、取得がうまくいかない文字があるようです。組み合わせによってみたいです。
動的ページをブックマークしたり、リンクを作ったりしたいので、データはGETで渡します。
内部でAnsiStringで処理してるみたいですが…。
とにかく、
String title = Request->QueryFields->Value[“title”];
では文字化けしたりして取得できず、色々と試したのですが、どうもうまく取得できませんでした。
わからないので、自分で書く事にしました。
何をどう処理しているのかわからないので、色々と試行錯誤しました。
どうやらRequest->QueryとHTTPAppのHTTPDecodeが使えそうでした。
boost::shared_ptr
queries->Delimiter = ‘&’;
queries->StrictDelimiter = true;
queries->DelimitedText = Request->Query;
どうもRequest->QueryがAnsiStringなのでうまくいっていないようでした。
UnicodeString unicode_query = Request->Query;
queries->DelimitedText = unicode_query;
として、Request->QueryをUnicodeStringに変換してからqueries->DelimitedTextに渡してみたら、ちゃんと切り分けてくれました。
UnicodeStringにしないとうまく切り分けられなかったので、切り分けのためにUnicodeStringにしてありますので、これをデコードするために再度AnsiStringに変換します。
AnsiString avalue = queries->Values[queries->Names[i]];
avalue = HTTPDecode(avalue);
UTF8String utf8_value;
utf8_value.SetLength(avalue.Length());
memcpy(utf8_value.c_str(), avalue.c_str(), avalue.Length());
でクエリを&で切り分けてデコードして、UTF8文字列に変換できたと思います。
あとは、適当にTPageProducerで透過タグの置換をしたりします。
それにしても、簡単にちょっとサンプルCGIを作って見る程度なら簡単にあっという間にできちゃうけど、サンプル以上の物を作ろうと思うと、結構自分で書かないとならない。
本当にこんな事が必要なのかな?大丈夫かな?なんか心配だな。
| 固定リンク
| コメント (0)
| トラックバック (0)
IDが001000番があったとする。
where id like '%1%'
で結果レコードが0件になった。
where id like '%0%'
や
where id like '%10%'
なら、正常に結果を得られた。
ちなみに、dBASEテーブル。
文字コードって事も無さそうだしなんだろか?
と思いテーブルを再構築してみたら検索できるようになった。
散々、悩んだ。
| 固定リンク
| コメント (0)
| トラックバック (0)
昨日、時間を掛けて頑張って二台にC++ Builder XE4をインストールしたのに、アップデートがあった。
アップデートのインストールを始めたら、bds.exeが動いてると叱られて、2010を使いながらXE4のアップデートをインストールすることはできないらしい。
また、ただ待つしかないみたいだ。
| 固定リンク
| コメント (0)
| トラックバック (0)
iOS開発ができるとか色々あったようですが、2010で頑張っていたんですが、今回バージョンアップしないと、次回はバージョンアップ価格で買えなくなりそうだったので、キャンペーン期間中になんとか会社の許可を取ってバージョンアップしました。
といっても、インストールしただけで、2010のプロジェクトが終わるまでは、暇な時間に少しずつしか弄れないから、本格的に使えるのは少し先になりそうだ。
急ぎの仕事が入っちゃってるから、どうしても慣れたツールになっちゃいます。
| 固定リンク
| コメント (0)
| トラックバック (0)