Đây là một hàm mẫu mất một con trỏ (hoặc một con trỏ như đối tượng) và một hàm thành viên:chức năng thành viên cuộc gọi trên shared_ptr thông qua con trỏ hàm thành viên trong mẫu
template <typename Ptr, typename MemberFunctor>
int example(Ptr ptr, MemberFunctor func)
{
return (ptr->*func)();
}
Nếu tác phẩm khi sử dụng với con trỏ bình thường:
struct C
{
int getId() const { return 1; }
};
C* c = new C;
example(c, &C::getId); // Works fine
Nhưng nó không làm việc với con trỏ thông minh:
std::shared_ptr<C> c2(new C);
example(c2, &C::getId);
Lỗi tin nhắn:
error: C2296: '->*' : illegal, left operand has type 'std::shared_ptr<C>'
Tại sao? và Làm thế nào để làm một cái gì đó mà làm việc với cả hai?
liên quan: http://stackoverflow.com/questions/31851987/pointer-like-classes-and-the -nhà điều hành – Quentin