Алгоритм с несколькими точечными структурами - PullRequest
2 голосов
/ 29 июня 2011

Практически каждый раз, когда я работаю с графическими приложениями, я обнаруживал, что мне приходится применять алгоритм, который я написал в прошлом или нашел в сети, который концептуально идеально соответствует тому, что мне нужно, но отличается от структур данных. Например, у меня иногда может быть «Точка», выраженная как Vector2 или как PointF, Point и так далее. Повторное использование такого кода в различных проектах вынуждает иногда добавлять нежелательные ссылки и всегда делать скучное преобразование из-в типы данных, поэтому мы неожиданно переписываем алгоритм для новой структуры данных. Итак, вопрос: есть ли (умный) способ абстрагирования средства доступа Point в алгоритме? Я думаю предоставить что-то вроде кортежа:

Func<TCoord,TPoint> Xaccessor
Func<TCoord,TPoint> Yaccessor
...
Func<TCoord,TPoint> ...accessor

но я должен сделать то же самое для установки значений координат, поэтому я заканчиваю таким беспорядком, что никто или не хочет использовать мою реализацию алгоритма. Как кратко указать точку доступа координат? Кроме того, мы также должны учитывать, что иногда точка может быть выражена с помощью float []. Я полагаю, что что-то можно сделать с помощью деревьев выражений, но я не проворен в этом вопросе, поэтому любой совет будет очень признателен! Большое спасибо

РЕДАКТИРОВАТЬ Реализация интерфейса не является опцией, поскольку классы точек не написаны мной, а отражение не является опцией по соображениям производительности.

1 Ответ

0 голосов
/ 29 июня 2011

Может как то так?

interface ICoordinate<T> { T GetX(int idx); T GetY(int idx); }

class PointRepresentation : ICoordinate<T> {
   PointTypeArrayOrWhatever a;
   T GetX(int idx) { return a.GetX; }
}

class MyAlgorithm {
   ICoordinate accessor;
   void Compute() {
       // do something with accessor.GetX();
   }
}

Или я вас неправильно понял? Я действительно не понимаю твои вещи Xaccessor ... И вам также следует помнить, что это, вероятно, замедлит ваш алгоритм ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...