Мне нужен способ вычисления различных типов аномалий в наборе данных. следовательно, я думал о наличии общего интерфейса Anomaly, который определяет интерфейс для конкретных аномалий. Тогда мое приложение может просто использовать интерфейс для перебора различных конкретных стратегий.Как создать экземпляр класса с разными аргументами
Основная проблема, с которой я сталкиваюсь, заключается в том, что для построения конкретных аномалий требуются разные входы. Например,
class Anamoly
{
public:
template <typename T>
virtual Anamoly * getInstance(T &) = 0;
virtual void processAnamoly() = 0;
virtual bool containsAnamoly() = 0;
virtual void logAnamoly() = 0;
};
Поскольку шаблоны функции не могут быть виртуальными, есть способ, чтобы обойти эту проблему, что позволит строительство бетонных Аномалии с разными входами, но, позвольте мне использовать общий интерфейс для отдыха поведение?
Я не уверен, что понимаю, почему 'getInstance' является функцией-членом и виртуальной. Похоже, что это должна быть отдельная фабричная функция или фабричный класс, и тогда, я полагаю, не было бы необходимости, чтобы она была виртуальной. Иерархия классов аномалий на самом деле не связана с тем, как они генерируются, или это так? – jogojapan
Вы правы, что проблему можно решить с помощью отдельного класса фабрики, но я пытался минимизировать количество требуемых классов. – Jimm
Хорошо. Позвольте мне сказать, что минимизация количества классов является сомнительной амбицией (потому что это не помогает читаемости кода или производительности). Кроме того, имейте в виду, что отдельный класс или функция необязательно требует отдельного файла на C++. Вы можете поместить хорошую и чистую фабричную функцию в пространство имен, определенное в том же файле, или даже как статическую функцию базового класса «Anomaly». – jogojapan