поколение функтора от типа указателя функции членства

Для расширения модуля F# просто создайте другой модуль с тем же именем:

module Seq =
    let myMap f s = seq { for x in s do yield f x }

Seq. // see your stuff here alongside normal stuff
5
задан Georg Fritzsche 10 October 2009 в 19:51
поделиться

1 ответ

Мне кажется, что вы пытаетесь превратить указатель, переданный в функцию, в аргумент шаблона, не являющийся типовым, что, я боюсь, не сработает (см. Комментарии к вашему вопросу

Что вы могли бы сделать, так это сохранить указатель на функцию в объекте функции. Похоже, что компилируется следующее:

#include <boost/bind.hpp>
#include <boost/function.hpp>

struct X {};

template <class T>
bool process(X) { return true; }


template <class C, class T1, class Func>
struct wrap1
{
    typedef bool result_type;
    Func f;

    wrap1(Func f): f(f) {}

    bool operator()(C* c, X x)
    {
        return (c->*f)(process<T1>(x));
    }
};

template<class C, typename T1>
inline // there are more for T1..TN
boost::function<bool (C*, X)> make_fn(bool (C::*f)(T1))
{
    return boost::bind(wrap1<C, T1, bool (C::*)(T1)>(f), _1, _2);
}


struct A
{
    bool f1(bool) { return true; }
};

void test()
{
    A a;
    X x;
    make_fn(&A::f1)(&a, x);
}

Однако я не уверен, хорошо ли это и как вы создадите остальные оболочки. Для последнего вы можете просто получить компилятор, поддерживающий вариативные шаблоны. :)

3
ответ дан 15 December 2019 в 06:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: