[英]some practical uses of mem_fn & bind
有人可以推薦 tr1 的 mem_fn 和綁定實用程序的一些很酷的實際用途嗎? 我不需要深奧的 C++ 來進行庫開發。 只是一些使用這些的應用程序級編碼。
任何幫助將不勝感激。
我已經將std::mem_fn
和std::bind
用於反射樣式屬性。
所以我會有一個class SomeClass
和一個AbstractProperty
的向量。 AbstractProperty
可以有幾種不同類型的類,例如PropertyFloat
、 PropertyU32
等。
然后在SomeClass
我將bind
到AbstractProperty
的std::function
。 我會通過做來bind
std::bind(std::mem_fn(&SomeClass::SomeFloatGetter), this)
對於 setter 類型的函數,我會使用
std::bind(std::mem_fn(&SomeClass::SomeSetterGetter), this, std::placeholders::_1)
當然,為類設置函數更困難,但我確實使用了std::function
來做到這一點。 在PropertyFloat
我有
typedef std::function<float(void)> GetterType;
所以它通過一個函數設置它,我會傳遞我顯示的第一個std::bind
作為參數
typename PropertyFloat::GetterType getter
當然,這些類型可以使用模板並且更加通用,但這是一種權衡,取決於您的開發目的。
以下代碼計算大於 5 的元素數:
#include <functional>
#include <algorithm>
#include <vector>
#include <iostream>
int main() {
using namespace std;
vector<int> v { 1, 5, 2, 7, 6, 7, 5 };
cout << count_if(v.begin(), v.end(),
bind(greater<int>(), placeholders::_1, 5)) << endl;
}
一個問題是 lambda 很難使用來自前向聲明類的方法。 我已經使用 bind 來利用使用前向聲明類中的方法的成員函數。 我找不到使用 lambda 的解決方案。 這是一個場景:我有一個成員函數列表,f1,f2,...在類 A 中定義,其中一些使用了來自前向聲明類的方法。 我希望能夠使用這些 fi 函數中的任何一個靈活地交換表達式樹(B 類)節點的運算符。 在 B 中,定義了泛型運算符。 我使用 bind 將 fi 函數自適應地關聯到泛型運算符。 這樣,fi 成員函數定義可以在放置前向聲明的 Ah 文件中原型化,然后 fi 函數的實現可以放在 A.cpp 文件中並由 B 類訪問。 我很好奇其他人是否遇到過這個問題以及他們是如何處理的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.