LoginSignup
2
2

More than 5 years have passed since last update.

C++ の小さな技術を紹介するシリーズ【小技C++ 全9回】#2<型エイリアスと関数宣言>

Last updated at Posted at 2018-04-22

準備

c++ の型エイリアスには、using キーワードを使用する。

size_tの型エイリアス

using Count = std::size_t;

functionの型エイリアス

using Callback = std::function<void()>;

vectorの型エイリアス

また、エイリアス対象の型がテンプレートの場合、エイリアステンプレートを使用する。

template< typename T >
using MyVector = std::vector<T>;

型エイリアスと関数宣言

簡潔な関数宣言について考える。

uint32_t attack( const uint8_t& strength, const uint8_t& rate );

この関数は 2つの uint8_t を引数として、uint32_t の値を返す。引数には strength と rate という名前が付けられている。

関数宣言において、引数はその型情報さえあればよい。先の関数宣言を簡潔な形にすると、次のようになる。

uint32_t attack( const uint8_t&, const uint8_t& );

引数の型名によって、この関数が返す値の意味(ダメージ値か何かだろうか?)をなんとなく推測できていたが、こうなってしまっては推測はおろか、最早何をしたいのかわからない。

そこで、型エイリアスを使って、この関数宣言の真意を伝えよう。

using Damage   = uint32_t;
using Strength = uint8_t;
using Rate     = uint8_t;

関数宣言を見直す。

Damage attack( const Strength&, const Rate& );

引数名を添える必要なく、必要な全ての引数情報を詰め込んだ。また、返値の意味もわかりやすくなっている。関数宣言が簡潔となれば、誤った順で引数を与えてしまうことや、違う型で返値を受けてしまうミスを減らせるため、caller にとっても有益となる。

関数宣言はメッセージ

規模が小さく、自分ひとりで設計が完結するプログラムの場合には、あまり気にすることはないかもしれない。しかし、幾度も説明や修正が必要なモジュール設計、特にAPI であればクリティカルな問題となり得るだろう。今回は型エイリアスを活用することで、プログラムコードが曖昧になりがちな部分の対策を紹介した。コメントがなくともすらすらと理解のできるプログラムコードほど、プログラマにとって優しいメッセージはないと思う。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2