-> a;
};
Как проверить, что foo было присвоено значение через default member initializer?
Сравнить адреса функций, на которые они указывают?
На stackoverflow нашёл такую штуку
template<typename T, typename... U>
size_t getAddress(std::function<T(U...)> f) {
typedef T(fnType)(U...);
fnType ** fnPointer = f.template target<fnType*>();
return (size_t) *fnPointer;
}
if (getAddress(f) == getAddress(g)) {...}
то есть для моего кейса это будет выглядеть как-то так?
struct S {
static a default_foo(b) {/*...*/}
std::function<a(b)> foo = &S::default_foo;
} s_obj;
if (getAddress(s_obj.foo) == getAddress(std::function<a(b)>(&S::default_foo))) {...}
всё, я разобрался, сделал как if (auto t = s_obj.foo.target<R (*)(Args...)>(); t && *t == S::default_foo)
Обсуждают сегодня