此代碼...C++ 11個佔位符與升壓
int main()
{
using namespace std::placeholders;
ClassA a;
ClassB b, b2;
a.SigA.connect(std::bind(&ClassB::PrintFoo, &b));
a.SigB.connect(std::bind(&ClassB::PrintInt, b, _1));
a.SigB.connect(std::bind(&ClassB::PrintInt, &b2, _1));
a.SigA();
a.SigB(4);
}
給人的編譯錯誤,「錯誤:參照‘_1’不明確」
它可以通過完全限定被固定佔位符...
int main()
{
// using namespace std::placeholders;
ClassA a;
ClassB b, b2;
a.SigA.connect(std::bind(&ClassB::PrintFoo, &b));
a.SigB.connect(std::bind(&ClassB::PrintInt, b, std::placeholders::_1));
a.SigB.connect(std::bind(&ClassB::PrintInt, &b2, std::placeholders::_1));
a.SigA();
a.SigB(4);
}
...但爲什麼第一個代碼片段不起作用?
編輯
只是爲了防止任何含糊之處,我與鏘編譯並與--stdlib=libc++ -std=c++0x
升壓1.52和整個代碼塊是這樣的......
#include <boost/signals2.hpp>
#include <iostream>
struct ClassA
{
boost::signals2::signal<void()> SigA;
boost::signals2::signal<void (int)> SigB;
};
struct ClassB
{
void PrintFoo() { std::cout << "Foo" << std::endl; }
void PrintInt(int i) { std::cout << "Bar: " << i << std::endl; }
};
int main()
{
// using namespace std::placeholders;
ClassA a;
ClassB b, b2;
a.SigA.connect(std::bind(&ClassB::PrintFoo, &b));
a.SigB.connect(std::bind(&ClassB::PrintInt, b, std::placeholders::_1));
a.SigB.connect(std::bind(&ClassB::PrintInt, &b2, std::placeholders::_1));
a.SigA();
a.SigB(4);
}
什麼...編譯您使用的?編輯:沒關係,'clang'使用'__1'作爲它奇怪的命名空間的東西。 – Xymostech
如果在範圍內有其他名稱爲_1的其他內容,則會出現此錯誤。 [編輯]有點晚了! – Slicedpan