2016-07-13 9 views
1

プライベートメンバーstd::array<int,10> m_arr;のクラスがありますが、デフォルトでは0が含まれていますが、あるケースでは別のものに設定する必要があります。 設定はその特定のケースのために何とかコンパイル時間を行うことができる場合、私は思っていたが、そのクラスのセッターstd :: arrayクラスメンバはコンパイル時に設定されていますか?

void setArray(const std::array<int,10>& arr) 
{ 
    m_arr=arr; 
} 

はありますか? ありがとうございます。

+7

これは、そのユースケースを正確に区別することによって異なりますか? – Smeeheey

+3

コンパイル時に 'const std :: array &arr' paramが判明したときには可能です。ユーザー入力などの場合は不可能 – Glapa

+0

そのような場合、すべての値は0以外の値にする必要がありますか、値が異なりますか? – NathanOliver

答えて

1

可能な解決策は、以下のいずれか:

#include<utility> 
#include<array> 

struct S { 
    constexpr S(): arr{} { } 

    template<std::size_t... I> 
    constexpr S(std::integer_sequence<std::size_t, I...>): arr{ I... } { } 

    std::array<std::size_t, 10> arr; 
}; 

int main() { 
    constexpr S s1{}; 
    constexpr S s2{std::integer_sequence<std::size_t, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1>{}}; 
    // equivalent to: constexpr S s3{std::integer_sequence<std::size_t, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9>{}}; 
    constexpr S s3{std::make_index_sequence<10>{}}; 
} 

integer_sequenceはC++ 14改正の一部です。
とにかく、C++ 11ベースのプロジェクトに適した構造体の実装をオンラインで見つけることができます。

関連する問題