Я создал функцию, которая требует функцию указателя списка функций, как показано в function_creater
, и возвращает функцию списков.
Я пытаюсь удалить std::list<>
как часть входных параметров, где следует принять любой произвольный контейнер, например,
funciton_creater(std::function<some_container<std::function<void(T&)>>(T&)> trans_func)
template <typename T>
std::function<std::list<T>(T&)> funciton_creater(std::function<std::list<std::function<void(T&)>>(T&)> trans_func){
return [trans_func](T& state) {
auto transitions = trans_func(state);
std::list<T> new_states{};
for (auto&& trans : transitions) {
auto succ = state;
trans(succ);
new_states.push_back(succ);
};
return new_states;
};
}
Что касается этой конструкции, я пытался использовать Sfinae там, где у меня сейчас есть:
template <typename T, typename = void> // primary declaration
struct is_container : std::false_type {}; // when all specializations fail
template <typename T>
struct is_container< // specialization
T, // conditions:
std::void_t<decltype(std::begin(std::declval<T&>()))>
> : std::true_type
{};
template <typename C> // *_v value
constexpr auto is_container_v = is_container<C>::value;
Моя проблема в том, что я не могу создать оператор std::enable_if
, который проверяет, содержит ли std::function
контейнер.