KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
struct InkPen { void Write() { this->WriteImplementation(); } void WriteImplementation() { std::cout << "Writing using a inkpen" << std::endl; } }; struct BoldPen { void Write() { std::cout << "Writing using a boldpen" << std::endl; } }; template<class PenType> class Writer : public PenType { public: void StartWriting() { PenType::Write(); } }; int main() { Writer<InkPen> writer; writer.StartWriting(); Writer<BoldPen> writer1; writer1.StartWriting(); return 0; } I wrote the above code as part of learning policy based designs . I have few questions on the above code 1 - Does this implementation look correct? I mean: does it really look like a policy based design? 2 - I can now hook any kind of pens to writer. But what will I do when I got a pen with no default constructor (only parameterized constructors)? How will I handle this situation? template<class PenType> class Writer : public PenType { public: void StartWriting() { PenType::Write(); } }; 3 - When the above code is used like Writer<InkPen> writer; I guess compiler will replace PenType with InkPen . If yes, why I am not able to call just Write() from StartWriting() instead of prefixing base class name ( PenType::Write() )? 4 - I think policy based design forces you to derive from classes which is semantically invalid. In the above code, a writer is derived from a pen only because writer uses a pen. But saying writer is a pen is semantically invalid. Is there any other better way to address this or I am missing something here? Any thoughts?
Tags (comma-separated)
Save Edits
Cancel