Функция должна принимать любой контейнер, но возвращать список типов внутри контейнера - PullRequest
0 голосов
/ 09 июня 2019

Я создал функцию, которая требует функцию указателя списка функций, как показано в 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 контейнер.

...