с учетом класса шаблона, который будет создан только для трех различных типов A, B и C, существует ли способ привязать вызов внешней функции к другому классу на основе типа шаблона, когда шаблон связан с типом?
Например,
class template<T> {
private printer myPrinter;
Print(T obj) {myPrinter.Print(obj);
}
class printer {
public Print(A obj){};
public Print(B obj){};
public Print(C obj){};
}
Теперь, насколько я понимаю, выше не сработает.
Что оставляет меня с выбором
1) Написание трех разныхклассы вместо шаблона (имеющие код три раза, а затем статически привязанный к вызову во время компиляции).
2) Изменение дизайна так, чтобы функция печати была включена в объекты A, B и C,и шаблон изменится на
class template<T> where T : IPrintable {
private printer myPrinter;
Print(T obj) {obj.Print());
}
, но это приведет к динамическому разрешению вызываемой функции во время выполнения и к нежелательному дизайну, поскольку в моем случае функция Print логически больше относится к принтеру.
3) Используя ключевое слово dynamic, что-то вроде этого:
class template<T> {
private printer myPrinter;
Print(T obj) {myPrinter.Print((dynamic)obj);
}
Привязка здесь будет происходить при каждом вызове функции, который я представляю.
Итак, то, что я действительно ищу, - это решение, которое сохраняет функции в классе принтера (исключает два), не имеет код многократно (исключает 1) и динамически связывает функцию Print безкаждый вызов, кроме инициализации шаблона (исключает 3).
По сути, я думаю, что как только шаблон будет создан, среда выполнения должна знать, какую функцию вызывать при каждом вызове, и не должна каждый раз выполнять поисквызывается функция.
Итак, мои вопросы, правильное ли мое понимание выше?И есть ли способ динамического связывания, когда шаблон связан с типом шаблона, или лучший способ сделать это выше?И каковы будут издержки использования динамических и множественных классов?
Спасибо