#include <functional>
#include <sys/types.h>
#include <sys/socket.h>
std::function<decltype(::bind)> mockbind = ::bind;
int main()
{
}
Đoạn mã trên hoạt động trên hầu hết các nền tảng tôi biên dịch. Nhưng trên ubuntu 14.04 sử dụng g ++ - 7 Tôi nhận được một lỗi:C++ xóa bỏ loại trừ khỏi decltype trả về loại
X.cpp:7:65: error: variable ‘std::function<int(int, const sockaddr*, unsigned int) noexcept> mockbind’ has initializer but incomplete type
std::function<int(int, const sockaddr*, unsigned int) noexcept> mockbind = ::bind;
^~~~~~~~
Bây giờ nếu tôi tự đi và thay đổi kiểu của mockbind
std::function<int(int, const sockaddr*, unsigned int) noexcept> mockbind = ::bind;
Đúng như dự đoán tôi nhận được lỗi tương tự:
Bây giờ nếu Tôi xóa số noexcept
std::function<int(int, const sockaddr*, unsigned int)> mockbind = ::bind;
Nó biên dịch như mong đợi.
Vì vậy, câu hỏi là tôi có thể áp dụng một số mã mẫu để loại bỏ các noexcept
từ loại trả lại bởi decltype
và làm cho nó hoạt động như mong đợi.
Không 'auto mockbind = :: bind' làm những gì bạn muốn? – whoan
@whoan: Không vì nó không tạo đối tượng kiểu 'std :: function <>'. Nếu không có nó sẽ được khó khăn để ràng buộc funcotors để 'mockbind'. –