Хочу вот это:
#include "boost/type_traits/is_base_of.hpp"
template<class T>
struct B {
static int _error[boost::is_base_of<B,T>::value ? 1 : -1]; //error C2118: negative subscript
};
struct A : B<A> {};
Может всё-таки можно?
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Здравствуйте, Vain, Вы писали:
V>Хочу вот это:
V>V>#include "boost/type_traits/is_base_of.hpp"
V>template<class T>
V>struct B {
V> static int _error[boost::is_base_of<B,T>::value ? 1 : -1]; //error C2118: negative subscript
V>};
V>struct A : B<A> {};
V>
V>Может всё-таки можно?
Ты не можешь использовать определение типа T в определении типа B, тут получается циклическая зависимость. Это общая проблема CRTP.
Но ты можешь использовать тип Т, например, в определениях функций и т.д.
Например так можно:
template<class T>
struct B {
~B()
{
static int _error[boost::is_base_of<B,T>::value ? 1 : -1];
}
};
Или так:
template<class T>
struct B {
static bool is_base_of() const
{
return boost::is_base_of<B,T>::value;
}
};
Здравствуйте, remark, Вы писали:
R>Но ты можешь использовать тип Т, например, в определениях функций и т.д.
R>Например так можно:
Мне нужно чтобы именно чтобы когда класс наследовался срабатывала проверка, т.к. T может быть только производный класс. Видимо через конструктор/деструктор только и можно
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]