Итак, я использую класс Mat
из opencv в программе, которую я пишу. Mat
выглядит примерно так:
class Mat {
public:
Mat(int width, int height, int type);
template <typename T> T getElt(int x, int y);
int depth();
...
}
Тип в конструкторе указывает, являются ли элементы в Mat
float
s, int
s и т. Д., А также количество каналов в изображении. depth()
возвращает тип данных, используемый для хранения элементов изображения.
К сожалению, мне нужно позвонить getElt()
в моем коде. Всякий раз, когда я делаю это, я использую оператор switch
, чтобы проверить глубину Mat
, чтобы я мог вызвать getElt()
с соответствующим параметром шаблона. Делать это таким образом довольно многословно, поэтому мне было интересно, есть ли лучший способ сделать это. Могу ли я создать контейнер для Mat
и с помощью магии шаблона создать метод, который возвращает тип, а не значение? Или я мог бы использовать макросы, чтобы сделать вещи более эффективными и логичными?
Я бы предпочел не иметь подкласса Mat
, поскольку есть несколько методов, кроме getElt()
, для которых у меня есть такая же проблема.
Редактировать: уточнение описания.