this questionで、OPはC++では不可能なテンプレートtypedefに対する解決策を求めました。 OPはまた、溶液に自分自身を提示し、それを好きではなかった:テンプレートtypedefがC++(C++ 11ではなく)で問題になっています
template<size_t N, size_t M>
class Matrix {
// ....
};
// Problem - will not compile
typedef Matrix<N,1> Vector<N>;
// Solution
template <int N>
class Vector: public Matrix<N,1>
{ };
私の質問、Helper::type
solutionは、これらのクラスはベースポインタで使用されることを意図されることはありませんと仮定すると(OPのソリューション上で私たちをどのような優位性を与えるんさまたはnew
'd)?空のクラスでは、リリース時にオーバーヘッドが発生しません(またはそれはありますか?)。私が見ることができる唯一の欠点は、デバッグビルドでは、デバッグ時にベースクラスを拡張する必要があることです。
EDIT:選択された回答に加えて、継承されたバージョンではコンストラクタを定義する必要があることを示唆した@ Daniの回答を参照してください。これは追加の不都合です。
(のtypedefで、彼らは「differnetの」として見れません)(継承されません)コンストラクタ、またはテンプレートの特殊化の項に定義された操作の場合は、いくつかの潜在的な落とし穴を再定義するベクトルが必要ですそれ以外の場合は、実際には 'Helper :: type'が正しいタイプです。私は真剣にこのようなことを掘り下げてからしばらくしていますが、IIRCにはタイプ控除などの微妙な問題があります。 – Hurkyl