Mã này ...C++ 11 placeholders với tăng
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);
}
Cung cấp cho các lỗi biên dịch, "lỗi: tham chiếu đến '_1' là mơ hồ"
Nó có thể được cố định bằng cách tuyển đầy đủ placeholders ...
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);
}
... nhưng tại sao đoạn mã đầu tiên không hoạt động?
EDIT
Chỉ cần để ngăn chặn bất kỳ sự mơ hồ, tôi đang biên soạn với Clang và Tăng 1,52 với --stdlib=libc++ -std=c++0x
và toàn bộ khối mã là thế này ...
#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);
}
gì ... trình biên dịch bạn đang sử dụng? Chỉnh sửa: đừng bận tâm, 'clang' sử dụng' __1' làm điều không gian tên kỳ lạ của nó. – Xymostech
Nếu có cái gì khác gọi là _1 trong phạm vi, sau đó bạn sẽ nhận được lỗi này. [EDIT] một chút quá muộn! – Slicedpan