Описание тега static-polymorphism

1 ответ

Альтернативы абстрактному базовому классу для хранения

Я задаюсь вопросом о доступных альтернативах полиморфизму времени выполнения, в частности, альтернативе наличию общего базового класса между моими классами для хранения и взаимодействия с экземплярами производных классов. RTP имеет недостатки, связа…
14 июн '18 в 21:27
2 ответа

Статический полиморфизм и имена методов C++

Когда я использую статический полиморфизм (CRTP), есть ли хороший способ дать полиморфным методам их имена? template <class Derived> struct Base { void interface() { // ... static_cast<Derived*>(this)->implementation(); // ... } stati…
30 ноя '12 в 12:47
2 ответа

C++ - создать корзину для любой лямбды

Я хочу создать несколько экземпляров шаблонной лямбды в одном месте. Количество экземпляров и параметры каждого из них известны во время компиляции, поэтому я предполагаю, что это возможно. Это общая иллюстрация того, что я хочу сделать: enum class …
1 ответ

Как разделить участника между политиками?

Предположим, у меня есть хост-класс, который содержит член: template<class p1, class p2> struct host : public p1, public p2 { double member; }; и я хочу использовать один и тот же член в p1 и p2: struct p1 { void f1() { host::member+=1;} // th…
1 ответ

Использование членов объекта до его создания

У меня есть следующий простой код: #include <iostream> #include <vector> template <class Derived> struct Base { Base() { static_cast<Derived*>(this)->foo(); } std::vector<int> m_ints; }; struct Derived : Base<Deri…
27 мар '14 в 08:45
1 ответ

C++: понижение и понижение между производным классом шаблона и базовым классом?

У меня возникли проблемы с преобразованием указателя на шаблонный производный класс в указатель базового класса для целей сохранения на карте (и, очевидно, для его извлечения позже). Я имею: #include <map> //Role.h class RoleBase{}; enum class…
1 ответ

Статический полиморфизм CRTP: возможно ли заменить базовый класс на макет?

Я использую статический полиморфизм CRTP на сервере веб-сокетов, чтобы отделить сетевой код от бизнес-логики. Базовый класс вызывает методы для обработки производных сообщений, а производная в свою очередь вызывает базу для отправки / получения. Это…
08 янв '18 в 14:54
2 ответа

Возможна ли эмуляция чистой виртуальной функции в статическом полиморфизме с использованием CRTP?

Я пытаюсь реализовать полиморфизм во время компиляции, используя CRTP, и хочу заставить производный класс реализовать функцию. Текущая реализация такова. template <class Derived> struct base { void f() { static_cast<Derived*>(this)->f…
09 фев '15 в 05:48
0 ответов

Метафункция для выполнения операции приведения к статическим полиморфным типам std::is_convertible limited

Работа с библиотекой с большим количеством интерфейсов и частой сложностью приведения указателей при множественном приведении к наследованию, то есть необходимости в промежуточных приведениях и т. Д. Библиотека является частично метапрограммой, и пр…
21 авг '18 в 17:28
4 ответа

Логический тип Scala не замечает, что эти типы идентичны, какими бы они ни были

У меня здесь есть шаблон проектирования, где есть генератор объектов (MorselGenerator и его дочерние элементы), любой экземпляр которого всегда генерирует один и тот же точный тип объекта (Morsels и его дочерние элементы), но средство проверки типов…
8 ответов

CRTP и многоуровневое наследование

Мой друг спросил меня, "как использовать CRTP для замены полиморфизма в многоуровневом наследовании". Точнее, в такой ситуации: struct A { void bar() { // do something and then call foo (possibly) in the derived class: foo(); } // possibly non pure …
11 авг '13 в 17:02
2 ответа

Статический полиморфизм: как определить интерфейс?

Ниже приведен очень простой пример того, что я понимаю как статический полиморфизм. Причина, по которой я не использую динамический полиморфизм, состоит в том, что я не хочу препятствовать встраиванию функций PROCESSOR в op, template <class PROCE…
26 апр '15 в 11:24
1 ответ

C++ Полиморфный статический изменяемый указатель на дочернюю функцию

У меня есть класс A, который является потомком класса B, мне нужно, чтобы у всех детей класса B был указатель на функцию для обработки класса, который может быть изменен внешней функцией в другом файле после компиляции классов. Все экземпляры класса…
1 ответ

Статически оборачивать полиморфный итератор библиотеки, не раскрывая библиотеку пользователю

В настоящее время я интегрирую библиотеку хранилища данных в свое приложение. Мне нужно иметь возможность макетировать это хранилище данных (которое требует интенсивного ввода-вывода) для моих модульных тестов, поэтому создаю оболочку вокруг интерфе…
26 июл '17 в 01:33
5 ответов

Есть ли настоящий статический полиморфизм в C++?

Вот простой код на C++: #include <iostream> #include <typeinfo> template<typename T> void function() { std::cout << typeid(T).name() << std::endl; } int main() { function<int>(); function<double>(); return 0…
0 ответов

Какая комбинация инструментов повышения позволяет использовать абстрактный шаблон фабричного дизайна?

Из того, что я понимаю, комбинация boost:: function, boost:: factory и std:: map позволяет создавать фабрику объектов. http://www.boost.org/doc/libs/1_49_0/libs/functional/factory/doc/html/index.html Loki есть абстрактная фабрика, но по какой-то при…
1 ответ

Выбор базового класса CRTP для наследования

Допустим, у меня есть следующий очень простой базовый класс CRTP: template< class D, class T > struct Base { T foo() { return static_cast< D* >(this)->foo_i(); } }; А также, несколько производных классов. Все работает хорошо, но есть …
03 фев '13 в 10:30
1 ответ

C++ самостоятельно добавляет статически-полиморфный класс в список подклассов constexpr

У меня есть большое количество подклассов, которые подписываются на различные события, такие как инициализация и удаление сущностей. В настоящее время я решаю это, делая class A{ static void init(); void kill(ID); } class B{ static void init(); void…
1 ответ

Любопытно повторяющийся шаблон и виртуальное наследование

Я использую любопытно повторяющийся шаблон для моделирования статического полиморфизма. Это работает абсолютно нормально, пока не представишь virtual inheritance (для решения diamond problem). Затем компилятор (Visual Studio 2013) начинает жаловатьс…
2 ответа

Статический полиморфизм для выбора метода и объекта в C++

Попытка получить метод времени компиляции и выбор объекта без базового класса и виртуальных вызовов. Вот случай: struct A { void f1()const { cout << "A::f1" << endl;} void f2()const { cout << "A::f2" << endl;} }; struct B { v…