それC++なら#defineじゃなくてもできるよ

この記事は 初心者 C++er Advent Calendar 2015 18日目の記事です.
17日目の記事は@yumetodoさんで C99からC++14を駆け抜けるC++講座でした.

はじめましての人ははじめまして, とさいぬです.
自称情報系の電気科学生をやっています.

C++歴は2年くらいで, Twitterで知り合ったC#erやRubyistのマネをしようとTwitterライブラリを書いたり, 最近は某所でプログラムを書きながら新しく入ったメンバーにC++を教えたりもしています.

もう汚いマクロは見たくないんだ

今年は何かと マクロ に苦しめられた年でした.

C言語の入門書や学校のC言語の授業では, #define定数を定義するための構文 として細かな説明もなく使われだしたりします.
故に, 今年から参加することになった某所のソフトでは, こんなコードや

こんなコードまで発掘されました.

また, 昨年秋から今年の初めまで触っていたとあるフレームワークでは, 特殊な構文を実現するために定義された大量のマクロに起因する不可解なコンパイルエラー に悩まされ, C++やめてやろうかとまで思ったりもしました.

もうこんなマクロ定義するの, やめませんか?

そうした思いを込めて, この記事では Cプリプロセッサとは何か, そして C++だからできる#defineを使わない書き方 について紹介できたらなと思います.

Read More »

クラスメンバへのポインタ

某所で書いているプログラムで, std::thread() にクラスのメンバ関数を渡したいなーってことがあった.
std::thread::thread - cppreference.comにもそれっぽい記述がないのでググっていると, どうやらこんな感じにするらしい.

c++ - Start thread with member function - Stack Overflow

この&nyan::workerみたいな記述がサッパリわからなかったので, C++のクラスのメンバ関数のポインタを調べたときのメモ.

Read More »

関数の戻り値が最も小さくなる配列の要素は何番目か

関数foo()と何らかの値の入った配列nyanがあって,

foo(nyan[n])が最小になるn取得するって感じのコードを某所で見つけた.
こんな感じ.

別に問題ないんだけれども, とにかくCoolじゃなくて個人的にもにょる…

ってことでこんな感じなのを思いついた. もっとよさ気な書き方があったら教えてくださいー.
動作確認はclang++ -Wall -Wextra -std=c++14 prog.ccでしました.

Read More »

Boost.Asioでシリアル通信してみる

にゃんにゃん.

自作の某ライブラリでhttpクライアントとして使っているBoost.Asioですが, シリアル通信もできるっぽいので, 雑にArduinoとPing-Pongしてみました.
arduino

環境

  • Arch Linux x86_64
  • Boost 1.57.0
  • clang 3.6.0
  • Arduino Uno
  • avr-gcc 4.9.2
  • avrdude 6.1

PC側

簡単ですね. Boostのドキュメント見ながらでも数分で書けました.

$ clang++ -std=c++1y -Wall -Wextra -lboost_system serial.cc
$ ./a.out

Arduino側

正直こっちのほうが時間がかかりました. 5時間位でしょうか…
まぁArduino(AVR)触ったのも2年ぶりくらいだし仕方ないね.

$ avr-g++ -std=c++1y -mmcu=atmega328p -Wall -Wextra -Os pingpong.cc
$ avr-objcopy -O ihex -j .text -j .data a.out pingpong.hex
$ avrdude -c arduino -P /dev/ttyACM0 -p m328p -b 115200 -u -e -U flash:w:pingpong.hex:a

see also

[ネタ] QWebViewでGUIアプリケーションを作る

CocoaTwit

以前から何度かつぶやいていた自作Twitterクライアント, CocoaTwit-QWebViewを公開しました.
img

A Simple and Cute Twitter Clientをコンセプトに, シンプルなデザインかつ細かな拡張のしやすいTwitterクライアントを目指しています.
また, 僕が今まで使ってきたTwitterクライアントの手が届かなかったところを改善して実装していこうと思っています.
ちなみにCocoaTwitという名前に特別な意味は無いです. ココアさんかわいい.

バイナリ配布は今のところ予定していませんが, 気になるLinux使いの方はビルドしてみてください.
(Macでもイケると思ったけど, twitppがApple Clangでビルドできなかった)

この記事で紹介する手法はネタです

正月くらいからこのCocoaTwitをタイトル通りの手法で開発していました.
しかし, もっとよさ気な方法を見つけたため設計を大幅変更することにしました1.

この時点でQWebView版CocoaTwitも本記事もある程度出来上がっており, 消してしまうのがもったいなかったためネタ記事として公開することにしました.
こんなブッ飛んだこともできるんだな〜って感じで読んでもらえると良いかと思います.

Read More »