Например у меня есть шаблонный класс Event, который принимает THandler, обычно передаю std::function<...> с определнной сигнатурой (например void(Objeсt*, const EventArgs&>) т.е аргументов будет всегда два. Можно ли узнать вот эти типы: Objeсt и EventArgs?
mayton2019, потому что RTTI )))
Но это я просто вдогонку стиля беседы. В вопросе нет ни слова про RTTI, Дима на что-то свое подумал и вот так решил выразить свое мнение. Помогает ли его мнение хоть кому-то - вопрос отдельный. Особенно с учетом факта, что вопрос к RTTI даже косвенного отношения не имеет. Вопрос имеет крайне отдаленное отношение лишь к интроспекции, которая к RTTI тоже никакого отношения не имеет.
А вот дальше будет по сути дела. Dyikot , вопрос у тебя понятный и даже обычный. Да, в общем случае можно узнать эти аргументы. Чтобы помочь тебе, сперва мне надо понять как ты хочешь распоряжаться полученной информацией. Допустим, у тебя уже есть знание об этих типах, пусть их будет даже не два, а заранее неизвестное N.
Что у тебя по ним в планах дальше? Как хочешь с ними работать?
Чтобы не запускать цепочку технических долгов. Евгений верно говорит что
желательно в фазе написания кода уже знать как мы будем дальше работать.
99% кодирования на С++ предполагают что мы всегда знаем типы и генерики
в фазе компилляции. Objeсt* - желательно выкинуть из кода и заменить его
каким-то базовым классом в известным интерфейсом. Тоесть принцип LSP
должен работать. Тоже со вторым аргументом.
В некоторых случаях (типичное Java/Spring приложение) информация о типах
в фазе компилляции нам неизвестна. Она приходит из runtime. Но на С++ это не типично
и лучше этого избегать.