У меня есть собственный шаблон класса массива, в который я хотел бы при желании добавить функциональность.
В качестве примера функциональности возьмем поддержку многопоточности: в некоторых случаях мне нужны массивы, которые помещают #pragma omp atomic
непосредственно перед любым кодом обновления (директива компилятора, которая обеспечивает атомарное поведение, подробности не раскрываются) t важно). В других случаях мне нужны массивы, которые этого не делают, так как я знаю, что они будут обновляться только безопасно, и мне нужно избегать снижения производительности.
Интуитивно должно быть возможно определить класс под названием AtomicUpdates
, от которого я могу наследовать. Итак, чтобы определить двойной массив с атомарными обновлениями, я бы сказал что-то вроде
class AtomicDoubleArray : public MyArray<double>, public AtomicUpdates {};
. Но я не понимаю, как это реализовать на практике, а также это нарушит принцип наследования интерфейса, а не реализации .
Может ли кто-нибудь объяснить мне, чем я действительно хочу здесь заниматься?