2017-12-09 7 views
0

私はこの質問に関する回答が見つかりませんでした: 私はテンプレートクラスDenseMatrixを書いていますが、このクラスはMathematicaの前に "Dense"という仕様を使用する必要があります。先頭にSparseMatrixを派生させた基底抽象クラスMatrix(CRS、MCRS、BlockCSR ..のような疎行列のための異なる記憶方法を表す多くのクラスを導出する) 今私はmain関数単純な名前の行列を使用して、クラスDenseMatrixのオブジェクトをインスタンス化する可能性(つまり、抽象基底クラスのように行列されていません)ので、私はCにテンプレートクラスのエイリアスを使用

typdef struct { 

} name ; 
を使用可能であったことを覚えておいてください

その後、

name obj ; // instance of struct 

私は同じ事を入手したいが、DenseMatrixクラス宣言のヘッダーに直接それを行うための最善の方法であるC++クラス(指向のC++ 11) で? P.P.メソッドの定義時に、私はいつもDenseMatrix ::なくエイリアスここ

編集例使用し、コード

# include "Matrix.H" 

template <typename Type> 
class DenseMatrix ; 

template<typename U> 
std::ostream& operator<<(std::ostream& os, const DenseMatrix<U>& m) 



    template <typename Type> 
    class DenseMatrix 
           :  public Matrix<Type> 
    { 


      template<typename U> 
      friend std::ostream& operator<<(std::ostream& os, const DenseMatrix<U>& m); 

    //-- 
    // 
     public: 

      constexpr DenseMatrix (std::initializer_list<std::vector<Type>>) noexcept ; 

      constexpr DenseMatrix (const std::string&); 

    //  constexpr DenseMatrix (std::size_t , std::size_t); 

      virtual ~DenseMatrix() = default ; 

      Type& operator()(const std::size_t , const std::size_t) noexcept override; 

      const Type& operator()(const std::size_t , const std::size_t) const noexcept override; 

      void constexpr print() const noexcept override ; 

      auto constexpr size1()const noexcept { return Rows ; } 

      auto constexpr size2()const noexcept { return Cols ; } 

      Type constexpr findValue(const std::size_t , const std::size_t) const noexcept ; 

     protected: 

      std::vector<Type> data ; 

      std::size_t Rows ; 
      std::size_t Cols ; 

      mutable Type dummy ; 
    } ; 
// here ------\/ ------- 
template <typename T> 
using matrix<T> = DenseMatrix<T> 

感謝の終わりを見てR2RT @それは私が探していたものです!

+0

現代のC++はtypedef' '上' using'を好みます。 – user0042

+0

はい私は知っている!しかし、これは私の質問ではありません..私の質問は、それを正しく使用し、私が書いたものを得る方法です! –

+0

あなたがこれまでにやろうとしたことの簡潔な例を教えてもらえますか?テンプレートパラメータは、テンプレートパラメータなしでエイリアスを使用するために特殊化する必要があることは知っていますか? – user0042

答えて

1

を解決し、私は右のあなたを取得する場合は、ほとんどここですが、あなたはあまり1 <T>を持っている:

template <typename T> 
using matrix = DenseMatrix<T>; 

エイリアステンプレート

エイリアシングテンプレートがどのテンプレートで呼ばれています特殊化されている場合、タイプIDのテンプレートパラメータにエイリアステンプレートのテンプレート引数を代入した結果と同じです

http://en.cppreference.com/w/cpp/language/type_alias

関連する問題