כן, זה בעיקר עניין של עיצוב
את אומרת: "הרי אם אנחנו מדברים על טיפוס, אפשר להצביע אליו ולשלוח את הפוינטר לפונ´ שמתאימה לו" זה נכון, אבל זה אומר שכל פעם שתשתמשי בקוד עם טיפוס אחר, תצטרכי לקרוא לפונקציה אחרת בשביל המיון. זה עושה את השימוש במבנה נתונים לפחות נוח ו"כללי". כי אז אין פונקציית מיון ש"שייכת למבנה", אלא הפונקציה תהיה משויכת לכל טיפוס. במיוחד אם זו פעולה שהיא באופן עקרוני "פעולה על המבנה נתונים", ולא סתם על איבר (למשל למיין מערך, או לעבור על כל המבנה ולהדפיס כל איבר), אבל היא תלויה בסוג הנתונים, אז זה יותר הגיוני (לדעתי) לכתוב אותה באופן גנרי כזה. דרך יעילה אף יותר לעשות זאת הוא שהשיוך למצביע עם הפונקציה המתאימה יעשה רק בהתחלה באתחול של המ"נ. (אפשר לעשות זאת ע"י מבנה או מחלקה שיכילו את המ"נ עצמו, ובנוסף מצביע לפונקציה - שאותו נאתחל לפונקציה הרצויה, ואז כל פעם היא תקרא). אם נעשה את זה ככה אז לא יהיה צורך לאחר האתחול הראשוני "לזכור" מה היא הפונקציה המתאימה. תחשבי על מבנה נתונים מורכב שיש עליו הרבה פעולות שונות. בדרך הרגילה - כל פעם שתשתמשי בו עבור טיפוס אחר תצטרכי לזכור מהן כל הפונקציות "שלו" ולהשתמש בהן. בדרך הזאת - בשביל טיפוס אחר - את משנה רק את המצביעים לפונקציות באתחול, וכל שאר הקוד ישאר אותו הדבר. הכל עניין של עיצוב. (כמו הרבה דברים בתכנות)