How to write the constructor for a template class that wraps a container where the container can be both an array or a vector?

Car*_*ood 5 c++ c++11 c++17

我希望有一个通用的模板类,该类允许用户传递容器使用:

template<class Container>
struct Sum
{
  Container m_terms;
...
Run Code Online (Sandbox Code Playgroud)

其他类将从中派生,例如,

class MySum : public Sum<std::vector<int>>
{
...
Run Code Online (Sandbox Code Playgroud)

要么

class MySum4 : public Sum<std::array<int, 4>>
{
...
Run Code Online (Sandbox Code Playgroud)

容器需要从构造函数初始化。我最初的想法是使用std::initializer_list,例如

MySum ms{1, 2, 3, 4};
Run Code Online (Sandbox Code Playgroud)

这将需要添加以下构造函数:

template<class Container>
struct Sum
{
  Container m_terms;

  Sum(std::initializer_list<typename Container::value_type> const& il) :
    m_terms(il) { }
...
Run Code Online (Sandbox Code Playgroud)
class MySum : public Sum<std::vector<int>>
{
  using Sum<std::vector<int>>::Sum;
...
Run Code Online (Sandbox Code Playgroud)

但是我又如何才能使MySum4正常工作?一个array不采取std::initializer_list<>

这是显示编译器错误的更完整的代码:https : //wandbox.org/permlink/CZW3YaKdInwZZD8e