Сабж.
template<typename T>
struct BtsNode {
BtsNode() = default;
BtsNode(T&& data):
data(std::move(data)) {qDebug() << "BtsNode Move ctor";}
T data;
<Как написать сюда BtsNode?> *left{nullptr}, *right{nullptr};
~BtsNode() noexcept {
qDebug() << "BtsNode dtor";
if (left)
delete left;
if (right)
delete right;
}
};
struct ThreadedBtsNode : public BtsNode<T> {
std::int_fast8_t lf{0}, rf{1};
<Чтобы не нужно было пистаь тут ThreadedBtsNode, и вобще удалить эту строку> *left{nullptr}, *right{nullptr};
};
Решение:
template<typename T, typename D>
struct NodeCRTP {
NodeCRTP() = default;
NodeCRTP(T&& data):
data(std::move(data)) {}
T data;
D *left{nullptr}, *right{nullptr};
~NodeCRTP() noexcept {
if (left)
delete left;
if (right)
delete right;
}
};
template<typename T>
struct BtsNode : NodeCRTP<T, BtsNode<T>> {
using NodeCRTP<T, BtsNode<T>>::NodeCRTP;
};
template<typename T>
struct ThreadedBtsNode : NodeCRTP<T, ThreadedBtsNode<T>>{
using NodeCRTP<T, ThreadedBtsNode<T>>::NodeCRTP;
std::int_fast8_t lf{0}, rf{1};
};
Полный код: threadedbts.h bts.h