我有一个关于将一个类型的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
这个想法是能够通过字符串订阅事件,并且能够期望来自该事件的相等或更少的参数。这是事件调度程序的代码: ' –