Код: Выделить всё
namespace acme {
struct arg{};
class MyBase {
public:
virtual void f(int i, arg a) = 0;
};
}
Код: Выделить всё
namespace client {
class MyClass : public acme::MyBase {
public:
void f(int i, acme::arg a) { throw std::logic_error("not implemented"); }
};
}
С помощью статического отражения C++26 я могу перебирать чистые виртуальные функции-члены класса следующим образом:
Код: Выделить всё
template for (constexpr auto mem : define_static_array(members_of(^^T, access_ctx))) {
if constexpr (is_pure_virtual(mem)) {
// now what?
}
}
С помощью такой библиотеки, как Boost.CallableTraits, я могу получить return_type и args типа функции-члена, но я немного теряюсь в склейке и необходимости использования алиасов, но я могу применить return_type_t или args_t к типу [: type_of(mem) :], потому что в противном случае идентификатор_of просто вернет псевдоним типа.
Подробнее здесь: https://stackoverflow.com/questions/798 ... reflection
Мобильная версия