c ++ obtém o número de bytes dos argumentos da função [duplicado]

Nov 03 2020

Como obtenho o tamanho em bytes dos parâmetros de função? Exemplo: void DummyFun(int64_t a, int32_t b, char c);o tamanho em bytes será 13.

Estou tentando resolver isso usando modelos, mas não sou muito bom nisso.

Este é o código contextualizado e o que tentei até agora:

template<typename T>
constexpr size_t getSize()
{
    return sizeof(T);
}

template<typename First, typename ... Others>
constexpr size_t getSize()
{
    return getSize<Others...>() + sizeof(First);
}

class NamelessClass
{
private:
    typedef void (*DefaultCtor)(void*);
    
    void HookClassCtor(DefaultCtor pCtorFun, size_t szParamSize);

public:
    template<typename T, typename ... Types>
    inline void HookClassCtor(T(*pCtorFun)(Types ...))
    {
        // I need the size in bytes not the count
        // HookClassCtor(reinterpret_cast<DefaultCtor>(pCtorFun), sizeof...(Types));
        
        size_t n = getSize<Types ...>();
        HookClassCtor(reinterpret_cast<DefaultCtor>(pCtorFun), n);  
    }
};

Respostas

2 TedLyngmo Nov 03 2020 at 12:57

Em C ++ 17, você pode usar uma expressão de dobra :

template<typename... Others>
constexpr size_t getSize() {
    return (sizeof(Others) + ...);
}

Demo