У меня возник вопрос о том, чтобы сбрасывать std :: функцию одного типа в другой с тем же числом аргументов или больше, а затем вызывать его, поскольку он работает на всех компиляторах, но я не уверен, что это определенное поведение.casting std :: function для другой функции std :: и вызова его?
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 и вызываю его с двумя аргументами, когда он ожидает 4. Является ли это четко определенным поведением, поскольку он работает на msvc, gcc, clang или это какая-то случайность, и я должен избегать этого. Может ли кто-нибудь с большим опытом разбираться по этой теме?
Что такое прецедент? Просто любопытно. – Jagannath
Идея заключалась в том, чтобы иметь возможность подписываться на событие по строке и иметь возможность ожидать равные или меньшие аргументы от этого события. Вот код для диспетчера событий: ' –