has_member_of_type - метапрограммирование шаблона в C ++ - PullRequest
1 голос
/ 29 октября 2010

Я подозреваю, что это невозможно в соответствии с текущими стандартами 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 в моей библиотеке для обнаружения и использования другой ветви кода, если пользовательский класс имеет переменную-член определенного типа.

1 Ответ

2 голосов
/ 29 октября 2010

Нет, это невозможно.Вы даже не можете получить доступ к членам (если не скажете их имена), не говоря уже о проверке их типов.

...