- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个 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/
为什么我尝试打印“string的reference_wrapper”的行会给出不支持的运算符 x{s}; reference_wrapper y{str}; x.get() = 47;
我有两个类,比如说'Base ' 和 ' Derived ',其中 Derived类继承 Base类。 然后是对派生类实例 (std::vector > myContainer) 的引用的容器。 最后
我正在尝试将对 Base 对象的引用 vector 转换为对 Derived 对象的引用 vector 。一切编译正常,但我收到此错误:运行时错误时间:0 内存:3412 信号:6 这是我的代码: #
我最近了解到 std::reference_wrapper在 T 情况下,函数调用运算符有重载是类似函数的。我想知道标准委员会是否有理由在我们捕获类似 std::vector 的情况下不包含数组下标运
这个问题是this的延伸问题。我知道由于 push_back() 发生了新的内存分配,并且 std::vector v 的第一个元素的地址发生了变化,但 std::vector v2 相应地更改其地址
我的印象是我可以使用 reference_wrapper 生成一个仿函数,该仿函数将返回传递给 reference_wrapper 构造函数的对象。但这不起作用。我做错了吗?如果是这样,是否有更好的方
考虑以下代码: int v = 12; std::reference_wrapper x(v); std::reference_wrapper y(x); // (1) This works std
在下面的代码中,目标是得到一个reference_wrapper b。这样当a变化,b然而,也有变化,相反的情况是不允许的,即a b 时不应更改变化。我尝试了两种方法:第 7 行和第 8 行。第 7
我想知道如何完成以下操作 void f(string &&s) { std::string i(move(s)); /* other stuff */ } int main() { std
最近我一直在阅读 Scott Meyers 的优秀 Effective C++书。在最后一个技巧中,他介绍了 TR1 的一些功能——我通过 Boost 了解了其中的许多功能。 但是,有一个我绝对不认识
简介。 在 C++ 中,我们无法创建引用容器: std::vector vri; In instantiation of ‘class __gnu_cxx::new_allocator’: requi
如果您将 STL 容器与 POD 类型的 reference_wrappers 一起使用,则如下代码可以正常工作: int i = 0; std::vector > is; is.push_back(
#include #include #include using namespace std; struct foo{ int _val; }; int main(){ list A;
在各种情况下,我有一个对象集合(例如 vector )需要由多个函数处理。一些函数需要修改对象,而另一些则不需要。对象的类可以继承自抽象基类。因此,我有这样的东西: class A { public:
给定以下可调用对象: struct callable : public std::unary_function { void operator()() const {
问题: 假设一个函数 void doFoo(const std::vector >& data); 哪里DataT是保存一些数据的某种类型。我用了std::vector就像容器类的典型例子。 您认为用
我正在编写一个实用程序类来“展开” std::reference_wrapper ,但我对这意味着什么有点矛盾。 boost::unwrap_reference::type定义为 U (其中 T 是
#include "stdafx.h" #include class MyClass { }; template static bool Contains(const C& container,
这是我的情况: 我得到了作为指针的数据 double*。 我想将它包装在一个 vector 中以使用一个库,并避免乱用指针。 不想复制整个数组,我使用了一个引用包装 vector 。如果我想在使用该库
我正在尝试使用 std::reference_wrapper 制作多态 vector 对于这些类: struct Int2TypeBase{ virtual void which(){ std
我是一名优秀的程序员,十分优秀!