読者です 読者をやめる 読者になる 読者になる

幽霊型

C++

幽霊型(Phantom Type)というのがあります。この名前はHaskell由来なのですが、C++でも使います。
私が以前作った「浮動小数点数と整数のstrong typedef」でも使っているのですが、以下のような、「型パラメータの宣言には現れるが、定義では使用されない型」を幽霊型と呼びます。

template <class FloatingPoint, class Tag> // Tagは内部では一切使わない
class tagged_real {
    FloatingPoint value_;
};

型パラメータの異なる型は、別な型と見なされるので、それを利用してコンパイル時の型チェックを強化するのに使用します。
この例では、tagged_realとtagged_realのような、用途の異なる型同士の、暗黙の型変換を禁止するのに使用しています。


この例に限らず、C++のタグディスパッチと呼ばれる手法は幽霊型に含まれると思います。


参考:
Phantom type - HaskellWiki
Phantom Type in Scala