Giả sử tôi có một lớp có thể sử dụng các loại hàm khoảng cách khác nhau (khoảng cách Euclide, vv) để thực hiện một số so sánh. Tôi đã thực hiện các chức năng như là lớp con của một cách lớp:Sự khác biệt giữa việc chọn một phân lớp thông qua tham số mẫu hoặc tạo biến thành viên
class Distance;
class EuclideanDistance : public Distance;
class OtherDistance : public Distance;
Dường như để chọn loại khoảng cách để sử dụng, tôi có thể làm:
template <typename TDistance>
class MyClass;
và nhanh chóng nó với:
MyClass<EuclideanDistance> instance;
hoặc thực hiện điều tương tự với:
class MyClass
{
public:
Distance* myDistanceFunction;
}
và instantiating nó với
MyClass instance;
instance.myDistanceFunction = new EuclideanDistance;
có lợi thế nào của phương pháp này so với phương pháp khác không?
Cảm ơn,
David
Trong phương pháp thứ hai - có cách nào để tạo đối tượng thứ hai cùng loại với đối tượng đầu tiên không? –
@DavidDoria: bạn có ý nghĩa gì? Một 'MyClass', một' EuclideanDistance'? –
Một đối tượng khác có cùng kiểu như myDistanceFunction bên trong MyClass. –