угадать имплементацию функции по ее demangle С++11/17
От: reversecode google
Дата: 13.12.18 22:13
Оценка:
есть такой демангл

Base::apply<Derive<int>::set(int const&)::{lambda(void)#1}>(bool,bool,int)


удалось добится того же функционала но демангл получиля такой (вопрос не в компиляторе или версии С++, игрался с разными)

Base::apply<Derive<int>::set(int const&)::{lambda()#1}>(bool, bool, Derive<int>::set(int const&)::{lambda()#1})


проблема в последнем параметре
в оригинале там тип шаблона
а у меня лямда

в оригинале ассемблера в этой функции на один параметр больше перед последним(хотя демангл этого не отображает), там передается this наследника
т.е. (bool, bool, this, int) а демангл (bool, bool, int)

вот мой рабочий функционал
но хочу понять что было в оригинале
что бы у меня тоже такой же был демангл

#include <functional>

struct Base
{
    template<class Pred>
    void apply(bool, bool, Pred call)
    {
        call();
    }
};

template <class T>
struct Derive : public Base
{
    T val;

    void set(const T & value)
    {
        apply(false, false, [&]{ val = value; });
    }
};

int main()
{
    Derive<int> d;
    d.set(1);
    return 0;
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.