Я подозреваю, что это невозможно в соответствии с текущими стандартами C ++, но я все равно спрошу.
Я пытаюсь добиться того, чтобы компилятор выяснил во время компиляции, если класс содержит какие-либопеременная-член типа Base (вместе с ее производными).
например,
struct Base
{
};
struct Derived : public Base
{
};
struct Foo
{
int x;
Derived a;
Derived b;
};
struct Bar
{
int x;
};
Я хочу что-то по линии,
has_member_of_type<Base, Foo>::value
, в этом случае будетЗначение true (один или несколько элементов-членов имеют базовый тип Base), в то время как все остальное (включая фундаментальные типы) будет иметь значение false.
например,
has_member_of_type<Base, char>::value = false
has_member_of_type<Base, Bar>::value = false
Обратите внимание, что я пытаюсьиспользовать has_member_of_type в моей библиотеке для обнаружения и использования другой ветви кода, если пользовательский класс имеет переменную-член определенного типа.