Еще один трюк, о котором еще не упоминалось, заключается в том, чтобы класс, который реализует свойство (например, Foo
типа Bar
), также определяет делегат delegate void ActByRef<T1,T2>(ref T1 p1, ref T2 p2);
и реализует метод ActOnFoo<TX1>(ref Bar it, ActByRef<Bar,TX1> proc, ref TX1 extraParam1)
(и, возможно, версии для двух и трех «дополнительные параметры»), который передаст свое внутреннее представление Foo
в прилагаемую процедуру как параметр ref
. Это имеет несколько больших преимуществ перед другими методами работы с этим свойством:
Передача вещей будет ref
отличной картиной; слишком плохо, что он больше не используется.
Как упомянуто CuriouslyRecurringThoughts и Jarod42, проблема была связана с присвоением nullptr
m_ageDetectImplPtr
Следующий код работает
class AgeDetectImpl;
class AgeDetect {
public:
AgeDetect(std::string token);
~AgeDetect();
std::string getAge(std::string imagepath);
std::string getAge(uint8_t* buffer, size_t rows, size_t cols);
std::string getAge(const cv::Mat& image);
private:
std::unique_ptr<AgeDetectImpl> m_ageDetectImplPtr;
};