- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
您好,我有以下代码:
bool PinManager::insertPin(const std::string& p_pinNumber, const std::string& p_mode)
{
boost::shared_ptr<GPIOPin> pin(new GPIOPin(p_pinNumber, p_mode));
if (pin)
{
m_pinsInUse.insert(std::make_pair<std::string, boost::shared_ptr<GPIOPin> >(p_pinNumber, pin));
return true;
}
return false;
}
此代码始终编译,但当我添加 -std=c++0x
标志时,此代码无法编译并显示消息:
[ 42%] Building CXX object gpioaccess/CMakeFiles/gpioaccess.dir/pinmanager/pinmanager.cpp.o
/home/pi/robot_2.0/trunk/gpioaccess/pinmanager/pinmanager.cpp: In member function 'bool gpioaccess::PinManager::insertPin(const string&, const string&)':
/home/pi/robot_2.0/trunk/gpioaccess/pinmanager/pinmanager.cpp:39:101: error: no matching function for call to 'make_pair(const string&, boost::shared_ptr<gpioaccess::GPIOPin>&)'
/home/pi/robot_2.0/trunk/gpioaccess/pinmanager/pinmanager.cpp:39:101: note: candidate is:
/usr/include/c++/4.6/bits/stl_pair.h:262:5: note: template<class _T1, class _T2> std::pair<typename std::__decay_and_strip<_T1>::__type, typename std::__decay_and_strip<_T2>::__type> std::make_pair(_T1&&, _T2&&)
gpioaccess/CMakeFiles/gpioaccess.dir/build.make:77: recipe for target 'gpioaccess/CMakeFiles/gpioaccess.dir/pinmanager/pinmanager.cpp.o' failed
make[2]: *** [gpioaccess/CMakeFiles/gpioaccess.dir/pinmanager/pinmanager.cpp.o] Error 1
CMakeFiles/Makefile2:75: recipe for target 'gpioaccess/CMakeFiles/gpioaccess.dir/all' failed
make[1]: *** [gpioaccess/CMakeFiles/gpioaccess.dir/all] Error 2
Makefile:75: recipe for target 'all' failed
make: *** [all] Error 2
经过一番挖掘,我发现之前编译的这个事实可能是一个错误;但是,我仍然不确定如何解决这个问题。有没有人在正确的方向上有任何要点?
gcc --version
是 gcc (Debian 4.6.3-14+rpi1) 4.6.3
最佳答案
std::make_pair
在 c++03 之间发生了变化和 c++11 .
在c++11 ,它通过转发引用而不是通过值接受参数。这意味着通过显式指定其类型模板参数,您最终会得到以下实例化:
std::make_pair<std::string , boost::shared_ptr<GPIOPin> >
(std::string&&, boost::shared_ptr<GPIOPin>&&);
期望右值 引用,它不能绑定(bind)到左值。
您不应明确指定 std::make_pair
的类型模板参数。相反,您应该让编译器自行推导它们:
std::make_pair(p_pinNumber, pin)
此外,由于 c++11 ,当使用 std::map
时,您可以就地构造对:
m_pinsInUse.emplace(p_pinNumber, pin);
在c++17您可以利用类模板参数推导,并在不指定类模板参数的情况下构造 std::pair
:
std::pair(p_pinNumber, pin)
关于c++ - std::make_pair 与 c++ 11,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32443181/
我正在尝试键入别名 std::make_pair 函数以将其用作 abc::make_pair 函数。 auto(*make_pair)() = std::make_pair; namespace a
通常是 =在变量声明中,编译器将其视为移动构造。例如: vector foo = vector(13, 0); 将调用vector::vector(vector&&)构造函数。 这如何与 make_p
我已经用过typedef typedef std::pair coords; typedef std::pair fcoords; 然后创建此数据类型的 vector std::vector open
用std::make_pair there is only one implementation C++14 onwards templateconstexpr std::pair make_pair
我有一个这样的 map (第一个和第二个参数都是唯一的): std::map mapTest; mapTest.insert(make_pair(1, 101)); mapTest.insert(ma
make_pair 可以在不提及类型的情况下创建对。我想对我的类使用相同的技巧,但它继承自 boost::noncopyable,因此无法编译: template struct bit_writer
std::pair currentData; void OnCallback() { Object object = getObject(); OtherObject* otherOb
这个问题在这里已经有了答案: C++11 make_pair with specified template parameters doesn't compile (1 个回答) 关闭 9 年前。
MSVC++“实用程序” header 中 make_pair 的定义是: template inline pair make_pair(_Ty1 _Val1, _Ty2 _Val2) { // re
如果我从不同的范围将它插入到 map 中,是否需要分配一对? #include #include #include #include using namespace std; void par
在我最近编写的代码中,我注意到一个奇怪的行为。 当我使用第一个参数为 std::pair 的 make_pair 时,make_pair 变得“神奇地”在命名空间中可用(我不必使用 std:: 限定符
我有以下代码 #include using namespace std; int a = ...//gets calculated somehow
我正在尝试用 SDL_ttf 制作一个字体字典,就像我用 SDL_image 制作一个字典一样。由于字体是用 pnt_size 存储的,所以我制作了一个包含此信息的结构: struct fon
众所周知,make_pair 推导类型。这就是它存在并且方便的原因。现在看到这个 example : std::pair foo; std::pair bar; foo = std::make_p
考虑这个函数: std::pair getPair() { return std::make_pair(0, 0); } 为什么会编译? 不应该make_pair返回 std::pair这与
使用make_pair后,我得到了一些pairToCount 在这种格式中(元素 1 元素 2)= Db 中的频繁数: (1 2) = 1 (1 3) = 1 (1 4) = 1 (2 3) = 2
设计用于利用模板推导来实例化其模板类拷贝的函数类型有一个正式名称。 std::make_pair 是此类方法的主要示例。想到了术语“辅助方法”,但我记得还有一个更具体的术语……我就是想不起来了。 最佳
我在阅读图书馆的代码库时遇到了以下问题。 errorMap,在下面的代码中使用定义为: map > errorMap; 代码的相关部分是: errorMap["substitutions"] += m
我遇到了一些奇怪的事情,我想得到解释。以下代码片段提供了一个简单的类模板 type和两个 operator #include template class type { public: T v
我在使用模板成员重载运算符和使用 make_pair 时遇到了一些问题: class MyArchive { public: template MyArchive & operato
我是一名优秀的程序员,十分优秀!