Steve
Steve

Reputation: 859

How to initialize an array of structs containing union in C++11?

My question is tightly coupled with my another question. I have been struggling with initialization of an array containing struct members with union. Let's say I have following declarations in C++11

enum class FilterType { kLowPass, kAverage };

enum class FilterLowPassConfig {
  k1kHzLowPass = 0,
  k10kHzLowPass = 1,
  k20kHzLowPass = 2,
  k40kHzLowPass = 3
};

enum class FilterAverageConfig {
  kWindowSize256 = 0,
  kWindowSize128 = 1,
  kWindowSize64 = 2,
  kWindowSize32 = 3
};

union FilterConfig {
  FilterLowPassConfig low_pass_config;
  FilterAverageConfig average_config;
};

struct FilterSelect
{
  FilterType filter_type;
  FilterConfig filter_config;
};

Now I define an array:

FilterSelect filter_select[2];

What shall I do to be able initialize the array filter_select with brace-enclosed initializer list? I have been looking for a solution without boost::variant and boost::variant2.

Upvotes: 0

Views: 56

Answers (1)

Moe
Moe

Reputation: 555

You can use a Brace-Enclosed List

FilterSelect filter_select[2] = {
    {FilterType::kLowPass, {.low_pass_config = FilterLowPassConfig::k10kHzLowPass}},
    {FilterType::kAverage, {.average_config = FilterAverageConfig::kWindowSize64}}
};

Upvotes: 0

Related Questions