AP
Size: a a a
AP
AP
AP
AP
ПК
AE
D
D
D
AP
AE
AP
AE
AE
AP
s
s
s
s
#include <functional>типа если вот так вот сделаем - компилятор увидит что используются типы int и char и создаст под них реализации метода, но при этом пока не вызовется метод он не зарегистрируется.
#include <cstdio>
struct X
{
inline static std::function<void(X*)> impl = [](X*) {};
void invoke_all() { impl(this); }
template<typename T>
static bool register_foo()
{
impl = [old = std::move(impl)](X* x) { x->foo<T>(); old(x); };
return true;
}
template<typename T>
void foo()
{
static bool _ = register_foo<T>();
printf("%s\n", typeid(T).name());
}
};
int main(int argc, char* argv[])
{
X x;
x.invoke_all();
x.foo<int>();
x.foo<char>();
}
A