Как делают Вы передаете повышение:: связать объекты с функцией?

find {directory} -type f -name '*.extension'

пример для поиска всех CSV-файлов в текущем каталоге и его подкаталогах

find . -type f -name '*.csv'
11
задан Piotr Dobrogost 9 July 2009 в 20:06
поделиться

4 ответа

Вы можете просто использовать boost :: function . Я думаю, что boost :: bind действительно имеет свой собственный тип возвращаемого значения, но он совместим с boost :: function . Типичное использование - создание typedef для функции:

typedef boost::function<bool(std::string)> MyTestFunction;

, а затем вы можете передать любую совместимую функцию с помощью boost :: bind :

bool SomeFunction(int i, std::string s) { return true; }
MyTestFunction f = boost::bind(SomeFunction, 42, _1);
f("and then call it.");

Я надеюсь, что это то, что вы хотите.

Это также работает с методами, передавая указатель this для вызова в качестве второго параметра в boost :: bind .

17
ответ дан 3 December 2019 в 04:14
поделиться

Я бы определил минимизацию () следующим образом:

minimize(boost::function< return_type(param_type1,param_type2,param_type3,...)> f)
{
    ...
}

Затем вы могли бы вызвать Minim () следующим образом:

minimize(boost::bind(&class::function,actual_object,_1,_2,_3,...));
4
ответ дан 3 December 2019 в 04:14
поделиться

Измените параметр к параметру значения. Функциональные объекты намеренно легкие, и boost :: bind , безусловно, специально созданы, чтобы уместиться в пространстве в несколько байтов с использованием boost :: compressed_pair и т. Д.

template <class T>
void minimize(T f) {
}

Затем вы можете передать ему результат boost :: bind . Помните, что boost :: bind на самом деле является шаблоном функции, который возвращает некоторый объект определенного типа. Таким образом, имея минимизировать неконстантный ссылочный параметр, работать не может.

3
ответ дан 3 December 2019 в 04:14
поделиться

Во-первых, вы принимаете аргумент шаблона как ref-to-non-const, поэтому временное преобразование с помощью boost :: bind не будет привязано к нему. Таким образом, вы можете использовать его так:

template <class T>
T::result_type minimize(const T &f) {
}

Но если вы хотите использовать это и со своими функторами, они должны иметь константный оператор (). Так что, возможно, лучше по значению:

 template <class T>
 T::result_type minimize(T f) {
 }

Я считаю, что возвращение T :: result_type заставит T быть функцией boost :: (а не возвратом сложного типа bind), но я не на 100%

1
ответ дан 3 December 2019 в 04:14
поделиться
Другие вопросы по тегам:

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