Tôi đã đọc về các nhà soạn nhạc trong 'Thiết kế C++ hiện đại' và tôi hiểu nó như một loại công đoàn cho các loại. Bằng cách đặt các loại khác nhau, không liên quan trong một typelist, người ta có thể sử dụng nó để đại diện cho nhiều hơn một loại cùng một lúc, mà không cần thừa kế. Tôi đã thử nghiệm typelist trong một số chức năng đơn giản với các kiểu nguyên thủy, nhưng tôi không thể nhận được bất kỳ một trong số chúng hoạt động.Cách sử dụng các nhà đánh máy
Ai đó có thể cho tôi biết nếu sự hiểu biết của tôi về typelists là đúng và đưa ra một ví dụ thế giới thực đơn giản làm thế nào để sử dụng typelists trong mã trung bình mỗi ngày? Cảm ơn trước.
Btw, tôi đang sử dụng Windows và Visual Studio 2005 và trình biên dịch của nó.
CHỈNH SỬA: các ví dụ của tôi đã biến mất, tôi sử dụng dự án sandbox để thử nghiệm những điều đó. Nhưng nó đã được yên tĩnh tương tự như mã trong hướng dẫn Dobbs:
void SomeOperation(DocumentItem* p)
{
if (TextArea* pTextArea = dynamic_cast<TextArea*>(p))
{
... operate on a TextArea object ...
}
else if (VectorGraphics* pVectorGraphics =
dynamic_cast<VectorGraphics*>(p))
{
... operate on a VectorGraphics object ...
}
else if (Bitmap* pBitmap = dynamic_cast<Bitmap*>(p))
{
... operate on a Bitmap object ...
}
else
{
throw "Unknown type passed";
}
}
Điều này làm việc nhưng tôi không thấy lợi thế hơn thừa kế có khả năng làm như vậy. Và dàn diễn viên năng động không hoạt động trên các kiểu nguyên thủy. Có thể sử dụng nó làm giá trị trả lại như:
typedef Typelist<int, string> mylist
mylist myfunction() {
if(foo == bar)
return 5;
return "five";
}
Thêm ví dụ về mã không hoạt động cho câu hỏi của bạn. –