this иным образом невозможно.стандартный function wrapper
std::function
При сигнатуре void(T&, ars...)
T? Что такое ars?При сигнатуре void(T&, ars...) может принимать &T::Method.
Разве у всех методов не указатель первый аргумент?
this, я говорю что не всегда оно так, как у тебя в цитате. this может приходить вообще не так, как приходят аргументы. И проблема то еще заключается в том что не только же для ContentUIElement нужен шаблон данных. Например если реализовать следующие элементы с шаблонами данных ItemsControl, DataGrid, Expander, TabControl и т.д. И что мне тогда делать для каждого свой метод в IData?
IData у тебя остается только один, но теперь он возвращает ссылку на интерфейс провайдера данных. А уже провайдер данных пусть развивается так, чтобы удовлетворять все потребности в поставках шаблонов данных. Через реализацию посетителя снова или уже через прямой контроль.IData, который уже вернет голову стратегии. А от этой точки входа стратегия уже будет ветвиться сперва по элементу UI, а потом уже по реализации IData. Ну или наоборот, порядок не столь важен.dynamic_cast не нужен. У тебя в коде он все равно неправильно применяется.dynamic_cast соприкасается с шаблонным кодом, тебе нужно понять что плохо написано просто всё.у меня не транслятор ошибку пишет, а компилятор
type arr[N]; у тебя уже сконструирован. И транслятор тебе сообщает именно об этом. А подходящего конструктора по умолчанию c_function у тебя в коде вообще нет. Он удален по умолчанию. Потому что ты так написал, чтобы он стал удаленным по умолчанию.
И ты показываешь делегат. А про function wrapper я и всё остальное общество ничего не знаем. Это что-то твоё личное и поэтому другой человек тебя не понимает. Потому что ты говоришь на каком-то другом языке. Не на языке общих терминов.
Однако так никогда не было. Ты заблуждаешься уже начиная с этого убеждения. А ведь понятие метода - фундаментальное. Т.е. у тебя фундаментальные заблуждения.
Ссылка - это синтаксический эфемер. Указатель - это тип данных. И как тут одно к другому привести?
Ты очень сильно путаешься.
Делегат, т.е.
std::function, не умеет захватывать указатели на методы. Он умеет захватывать только указатели на функции или функциональные объекты по значению. Когда тебе нужно через делегат вызвать метод объекта, тебе нужно знать целевой объект для метода, захватить этот объект в замыкании лямбды, в теле которой и вызвать относительно объекта метод. И уже эту лямбду сможет захватить делегат.По значению.
Когда ты пишешь
то
EventHandler<MyType>не начнет для тебя принимать методы. Он будет принимать просто указатели функции, первым аргументом которых ожидается ссылка на объект типаMyType.