2016-07-18 10 views
1

テンプレートパラメータを使用してstd::array<std::pair<int,int>>のクラスメンバーを設定できるかどうかは疑問です。私はクラスのコンストラクタを使いたくない。事前にクラスのテンプレートパラメータとしてstd :: array

template<int N, std::array<std::pair<int,int>,N> arr> 
class test 
{ 
public: 
private: 
    std::array<std::pair<int,int>,N> m_arr=arr; 
}; 

int main() 
{ 
    constexpr std::array<std::pair<int,int>,N> arr 
    {{ 
    {1,2}, 
    {3,4}, 
    {5,6} 
    }}; 
    test<3,arr> t; 
    return 0; 
} 

ありがとう:

だから、このようなものになるだろう。

+6

でコンパイルしますか? – Holt

答えて

1

arrmain()の外側に定義してconst参照として渡すと、それは可能です。あなたがこれを行うにはしたくないのはなぜ

次のコードは、私の打ち鳴らす(3.5)

#include <array> 

constexpr int N {3}; 

template<int N, const std::array<std::pair<int,int>,N> & arr> 
class test 
{ 
    public: 
    private: 
     std::array<std::pair<int,int>,N> m_arr = arr; 
}; 

constexpr std::array<std::pair<int,int>,N> arr 
{{ {1,2}, {3,4}, {5,6} }}; 

int main() 
{ 
    test<3,arr> t; 
    return 0; 
} 
関連する問題