Мне нужно создать объекты из трех-четырех классов, все унаследованные от одного базового класса, но некоторые объекты должны иметь различное поведение - например, полное изменение одной функции;Я могу сделать это с помощью большего количества наследования и полиморфизма, но это не кажется хорошей идеей.Мое первое решение состояло в том, чтобы использовать специализированные шаблоны (для каждого нестандартного случая), но затем я расскажу о лямбдах в качестве параметра шаблона (как здесь: Можем ли мы использовать лямбда-выражение в качестве значения по умолчанию для аргумента функции? ) и используйте их вместо метода класса (как здесь: C ++ 11 лямбда и специализация шаблонов ) - для меня это гораздо лучшее решение, потому что мне нужно только передавать лямбду для каждой странной ситуации:
auto default_lambda = [&]() -> int {return this->Sth;};
template<typename functor = decltype(default_lambda)>
class SomeClass{
...
Проблема с этим указателем - метод, который я хочу изменить, нуждается в доступе к нестатическим методам, а лямбда определяется вне нестатического метода.Более того, я не могу передать ссылку на класс лямбде, потому что это шаблонный класс (или, может, я ошибаюсь?).Конечно, я могу использовать специализированные шаблоны или просто указатели на функции, но мне действительно нравится решение с лямбдами, и я считаю, что оно гораздо лучше, чем другие мои идеи.Есть ли способ «избежать» этой проблемы?Или, может быть, моя идея была плохой все время?