mã vấn đề của tôi:C++ quá tải: string literal vs tăng :: chức năng nhập nhằng
#include <string>
#include <boost/function.hpp>
void func (const std::string&) {}
void func (const boost::function<void()>&) {}
int main() {
func (main); // good
func ("bad");
return 0;
}
=>
error: call of overloaded ‘func(const char [4])’ is ambiguous
overload.cpp:4: note: candidates are: void func(const std::string&)
overload.cpp:5: note: void func(const boost::function<void()()>&)
Tôi biết tôi có thể giải quyết điều này bằng cách gọi một cách rõ ràng func (string ("xấu ")); hoặc bằng cách cung cấp một func (const char *), nhưng tôi tự hỏi nếu có một cách để giữ bên người gọi như trong ví dụ và không giới thiệu quá tải.
Có thể có thứ gì đó có boost :: enable_if? Cảm ơn mọi gợi ý.
bạn có thực sự nghĩ nguyên nhân là quá tải có chức năng 'boost ::' không, ví dụ bạn đã thử biên dịch mà không có quá tải? Công việc vừa ý? – Nim
có nguyên nhân của nó bằng cách tăng :: chức năng. Ví dụ tôi đã đăng tái tạo toàn bộ tình huống. – denis
vâng - đã không kiểm tra trước khi hỏi, chỉ hơi bemused rằng đây là trường hợp - có vẻ như nó là .. hmm .. ngắn cung cấp quá tải cho tất cả mọi thứ, không chắc chắn có một giải pháp gọn gàng cho việc này ... – Nim