gpt4 book ai didi

c++ - boost::array of boost::reference_wrapper 未编译

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:44:52 25 4
gpt4 key购买 nike

我有一个 boost::array 类型的类,它存储对 std::vector 的引用。我想构建一个引用数组(我正在尝试 DI,或者我认为是这样),但到目前为止还没有成功。

class RefHolder
{

public:

boost::array<boost::reference_wrapper<std::vector<int> >, 3> sumsArray;

};

class OriginalHolder
{

public:

OriginalHolder(boost::array<boost::reference_wrapper<std::vector<int> >, 3> & pSumsArray)
{
sumsArray[0] = boost::ref(_sums);
}

private:

std::vector<int> _sums;

}

int main()
{
RefHolder ref;

OriginalHolder original(ref.sumsArray);

return 0;
}

我真的不明白编译器告诉我的是什么。 array 甚至可以与 reference_wrapper 一起使用吗?

C:/ide-4.6-workspace/chunkybacon/boost/boost/array.hpp:60: error: no matching function for call to 'boost::reference_wrapper<std::vector<int, std::allocator<int> > >::reference_wrapper()'
C:/ide-4.6-workspace/chunkybacon/boost/boost/ref.hpp:43: note: candidates are: boost::reference_wrapper<T>::reference_wrapper(T&) [with T = std::vector<int, std::allocator<int> >]
C:/ide-4.6-workspace/chunkybacon/boost/boost/ref.hpp:33: note: boost::reference_wrapper<std::vector<int, std::allocator<int> > >::reference_wrapper(const boost::reference_wrapper<std::vector<int, std::allocator<int> > >&)
C:/ide-4.6-workspace/chunkybacon/TEST/TEST.cc: In constructor 'RefHolder::RefHolder()':
C:/ide-4.6-workspace/chunkybacon/TEST/TEST.cc:6: note: synthesized method 'boost::array<boost::reference_wrapper<std::vector<int, std::allocator<int> > >, 3u>::array()' first required here
C:/ide-4.6-workspace/chunkybacon/TEST/TEST.cc: In function 'int main()':
C:/ide-4.6-workspace/chunkybacon/TEST/TEST.cc:32: note: synthesized method 'RefHolder::RefHolder()' first required here
cc: C:/QNX641/host/win32/x86/usr/lib/gcc/i386-pc-nto-qnx6.4.0/4.3.3/cc1plus caught signal 1

当然我可以只使用普通指针,而且它可以工作,但我仍然有疑问,如果我能解决它,我宁愿使用引用。

我正在使用 QNX 6.4.1 和 GCC 4.3.3。

提前感谢您的帮助 =)

最佳答案

当您最初创建数组时,您有“空”条目。引用不能真的为空(好吧,它可能是,但这是一个非常糟糕的主意),因此引用不能用作数组条目。

考虑使用 boost::smart_ptr<vectorint> >反而。我意识到这并不是您想要的(指针与引用),但它确实有效,这是对它有利的一个重要方面。

------------评论中问题的回复--------

不同之处在于,引用 vector 必须引用存在于其他地方的对象——管理这些对象的生命周期并确保它们的生命周期比对它们的引用更长的地方。

智能指针 vector 必须指向堆分配的对象,并管理这些对象的生命周期。

这两种方法都有有效的用途。

关于c++ - boost::array of boost::reference_wrapper 未编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23112966/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com