3 回答

TA貢獻1804條經驗 獲得超7個贊
為什么std::function平等不具有可比性?
std::function是用于任意可調用類型的包裝,因此,要完全實現相等性比較,您必須要求所有可調用類型都具有相等性,從而給實現函數對象的任何人帶來負擔。即使那樣,您也會得到一個狹義的等式概念,因為如果(例如)等效函數是通過以不同順序綁定參數構造的,則等效函數會比較不等式。我認為,在一般情況下無法測試等效性。
什么是“類型系統中可能的孔”?
我想這意味著刪除操作符,并確定使用它們永遠不會給出有效的代碼,比證明在某些以前未發現的極端情況下不存在不必要的隱式轉換的可能性要容易得多。
std::shared_ptr有何不同?
std::shared_ptr具有明確定義的相等語義;當且僅當兩個指針均為空或非空且指向同一對象時,兩個指針才相等。

TA貢獻1772條經驗 獲得超8個贊
我可能錯了,但是我認為std::function對象的相等性在一般意義上是不可解決的。例如:
#include <boost/bind.hpp>
#include <boost/function.hpp>
#include <cstdio>
void f() {
printf("hello\n");
}
int main() {
boost::function<void()> f1 = f;
boost::function<void()> f2 = boost::bind(f);
f1();
f2();
}
是f1和f2等于?如果我添加任意數量的函數對象,這些對象以各種方式相互包裝,最終歸結為對f... 的調用仍然相等,該怎么辦?
- 3 回答
- 0 關注
- 1069 瀏覽
添加回答
舉報