Tôi đang làm việc trên bộ giữ bản đồ nhiều loại. Nó hoạt động với tất cả các kiểu nguyên thủy và cũng với các cấu trúc, ví dụ: Điểm. Tuy nhiên, nếu tôi muốn thêm std :: chức năng như một loại hỗ trợ (sử dụng cho callbacks) sau đó trình biên dịch phàn nàn:toán tử quá tải với std :: tham số chức năng
MT.cpp: 426: 15: Không khả thi quá tải '='
MT .h: 31: 7: Chức năng ứng cử viên (toán tử gán bản sao ngầm) không thể thực hiện được: không được biết chuyển đổi từ '(lambda at MT.cpp: 426: 17)' thành 'const sharkLib :: MT' cho đối số thứ nhất
MT.h: 31: 7: Chức năng ứng cử viên (di chuyển ẩn toán tử gán) không thể thực hiện được: không có chuyển đổi đã biết từ '(lambda a t MT.cpp: 426: 17)' thành 'sharkLib :: MT' cho lập luận 1st
Tôi không thực sự quá tải =
điều hành nhưng thay vì quá tải []
với nhà xây dựng dành riêng cho mỗi loại được hỗ trợ.
.h
protected:
map<string,MT> valueMap;
public:
MT (int value);
MT (std::function<void(Ref*)> ccb);
virtual MT& operator[] (const char* key);
cpp
MT::MT (int value)
{
this->type = ValueType::intValue;
this->value.int_ = value;
}
MT::MT (std::function<void(Ref*)> value)
{
this->type = ValueType::ccbValue;
this->value.ccb_ = value;
}
MT& MT::operator[] (const char* key)
{
return this->valueMap[key];
}
sử dụng
MT mt;
mt["int"] = 1;
mt["ccb"] = [](Ref *){ CCLOG("Pressed"); };
dòng cuối cùng này là một với lỗi.
Có thể trả lời ở đây: http: // stackoverflow.com/questions/13358672/how-to-convert-a-lambda-to-an-stdfunction-sử dụng-templates – Chris
Tôi có dám hỏi tại sao ctors và 'operator []' có cùng kiểu không? – Yakk