C++ class 需要对另一个 class 的对象有可变数量的引用

C++ class needs to have variable number of references to objects of another class

假设我有一个 C++ class (class A),它需要引用另一个 class (class B) 的可变数量的实例。所需的引用数量在编译时已知。至于用法,我希望能够在编译时将对 B 类型对象的引用传递给 A 类型对象。

我一直在考虑如何解决这个问题,我的一个想法是使用可变参数模板构造。我对可变参数模板不是很熟悉,所以在研究该主题之前,我想知道它是否适合我的问题。

引用可能应该是(智能)指针或 std::ref 对象。为了简洁起见,我使用常规指针。根据您希望将它们传递给构造函数的具体方式,您可以这样做:

template <std::size_t nobj> class A
{
    std::array<B*, nobj> bs;
  public:
    // 1 Pass as separate arguments
    template <typename ... T>
    A(T* ... t) : bs{t...} {
       // check that the number of arguments is ok
       static_assert(nobj == sizeof ...(T));
    }
    // 2 Pass as an array
    A(const std::array<B*, nobj>& bs) : bs(bs) {}
};

// deduce the template parameter from the number of arguments
template<typename ... T>
A(T... t) -> A<sizeof ... (T)>;

所以你可以像这样进行初始化:

A a{&b1, &b2, &b3};

像这样:

std::array<B, 3> bs{&b1, &b2, &b3};
A a(bs);