#include <functional>
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class A
{
public:
void doStuff(function<void (const string *)> func) const
{
cout << "Const method called" << endl;
for(const auto& i_string : m_vec)
func(i_string);
}
void doStuff(function<void (string *)> func)
{
cout << "Non-const method called" << endl;
doStuff([&func](const string *str)
{
auto mutableString = const_cast<string *>(str);
func(mutableString);
});
}
private:
vector<string *> m_vec;
};
int main()
{
auto a = A{};
a.doStuff([](string *str){
*str = "I modified this string";
});
}
Trong ví dụ này, phương pháp const không bao giờ được gọi. Nếu mã có vẻ lạ, đây là những gì tôi đang cố gắng làm:Quá tải hàm với std :: đối số hàm: tại sao phương thức const không bao giờ được gọi?
Thay vì phương thức getter, tôi cho phép khách hàng lặp lại các đối tượng bằng cách truyền hàm. Để kích hoạt cả truy cập const và non-const, tôi muốn cung cấp quá tải const và không const. Hơn nữa, để tránh sao chép & dán, tôi muốn triển khai phương pháp không const theo phương pháp const: phương pháp const trong mã của tôi thực sự phức tạp hơn so với phương pháp tôi sử dụng ở đây.
Bây giờ, câu hỏi của tôi là: Nếu bạn chạy mã này, nó sẽ đệ quy gọi hàm không const cho đến khi chồng tràn. Tôi không hiểu tại sao dòng doStuff([&func](const string *str)
trong phương thức không phải const gọi chính nó chứ không phải phương thức const.
xóa 'const' sẽ dẫn đến sự mơ hồ –
Cảm ơn bạn. Tôi không chắc lắm. Tôi sẽ chỉnh sửa điều đó. – JKor