Возможно, я вышел из левого поля с этим вопросом, но можно ли определить функцию-член через конструктор?Инициализировать функции-члены с помощью конструктора
В моем случае я пытаюсь написать класс для выполнения надежного подгонки модели (с использованием RANSAC). Я хочу, чтобы это было обобщаемо для разных типов моделей. Например, я мог бы использовать это, чтобы определить оценку плоскости для множества трехмерных точек. Или, возможно, я мог бы определить трансформацию между двумя наборами точек. В этих двух примерах могут потребоваться различные функции ошибок и различные функции подгонки. Вместо того чтобы использовать класс, вызов статической функции может выглядеть
model = estimate(data, &fittingFunc, &errorFunc);
Я интересно, если я могу иметь экземпляр члена для этих модульных функций?
Что-то вроде
class Estimator
{
private:
// estimation params
double errorFunc(std::vector<dtype>, double threshold); // Leave this unimplemented
double fittingFunc(std::vector<dtype>, Parameters p); // Leave this unimplemented
public:
Estimator(void (*fittingFunc(std::vector<dtype>, Parameters), void (*errorFunc(std::vector<dtype>, double));
dtype estimate(data); // Estimates model of type dtype. Gets implemented
};
Estimator::Estimator(void (*fittingFunc(std::vector<dtype>, Parameters), void (*errorFunc(std::vector<dtype>, double))
{
fittingFunc = fittingFunc;
errorFunc = errorFunc;
}
Я полагаю, я извращается правильный синтаксис в моем примере, но я надеюсь, что вопрос ясен. В основном я спрашиваю: Может ли конструктор принимать указатели на функции в качестве аргументов и назначать им реализацию функций-членов?
Во-вторых, даже если это возможно, считается ли оно плохим?
UPDATE: Если это помогает, here is MATLAB code for robust estimation, что имеет такого рода обобщение структуры Я надеюсь повторить в C++
ответ на ваш вопрос ** да **. и исправьте свой код в 'double ';' и эта точка с запятой для чего? –
@ k-five: Типо, извините. И да, это возможно? Или да, это плохая форма? Или оба? – marcman
[*** Pimpl idiom ***] (http://stackoverflow.com/questions/60570/why-should-the-pimpl-idiom-be-used) может быть лучшим подходом. –