我有一個關於將一個類型的std :: function轉換爲另一個具有相同數量的參數或更多的參數的問題,然後調用它,因爲它適用於所有編譯器,但我不確定它是否是已定義的行爲。將std :: function轉換爲不同的std :: function並調用它?
std::function<void(int, float)> func1 = [](int a, float b){
std::cout << a << std::endl;
std::cout << b << std::endl;
};
std::function<void(int, float, int, double)>& func2 =
*reinterpret_cast<std::function<void(int, float, int, double)>*>(&func1);
func2(1, 2.0f, 3, 4.0);
這似乎正確地調用func1與期望的參數1,2.0f。其他通過的論據會發生什麼。當我交換func1和func2並在它期待時用2個參數調用它時會發生什麼?4.它是一個明確的行爲,因爲它在msvc,gcc,clang上工作,或者它是某種僥倖,我應該避免它。任何擁有更多專業知識的人都可以詳細闡述這個話題?
什麼是用例?只是好奇。 – Jagannath
這個想法是能夠通過字符串訂閱事件,並且能夠期望來自該事件的相等或更少的參數。這是事件調度程序的代碼: ' –