ネストされた部分的なテンプレート特殊化の構文を理解するのに問題があります。どう考えても正しい言い方だと思います。私が欲しいのはas()
、キャストされた値を返す関数です。ほとんどの場合static_cast
は問題なく動作するので、それを行う汎用バージョンがありますが、場合によっては具体的にしたいことがあります。私が抱えている問題は、共通のtypename
.
template<typename ClassType>
class Generic
{
public:
// Constructors/etc excluded
template<typename CastType>
CastType as() const;
private:
ClassType m_value;
};
// Templated version:
template<typename ClassType> template<typename CastType> inline
CastType Generic<ClassType>::as<CastType>() const
{
return static_cast<CastType>(m_value);
}
それがセットアップです。実際、それが最善の方法であるかどうかは100%確信が持てませんが、GCCでコンパイルされ、動作するようです.. とにかく。Eigen::Matrix<T,4,1>
ここで、部分的にテンプレート化された別のテンプレート化された型 (この場合は-- しかし、おそらくまたは別の型も使用される可能性があります。つまり、 a から aへのstd::vector
キャスト)に特化したいと考えています。std::vector<T>
std::list<T>
template<> template<typename CastType> inline
CastType Generic<Eigen::Matrix<CastType,4,1> >::as<CastType>() const
{
return m_value[0];
}
これは意味がありますか?異なるサイズの Eigen::Matrix を取り、それらを特別に処理するわずかに異なるバージョンはどうですか?
template<> template<typename CastType> inline
Eigen::Matrix<CastType,3,1> Generic<Eigen::Matrix<CastType,4,1> >::as<Eigen::Matrix<CastType,3,1>() const
{
return Eigen::Matrix<CastType,3,1>( m_value[0], m_value[1], m_value[2] );
}
上記の 2 つのコード ビットが機能せず、構文がおそらくひどいものであることはわかっています。これを解決しようとしています。これが重複している場合はご容赦ください。私はいくつかの同様の質問を見ましたが、どれもこれに関するものではないようでした.