c ++ Anzahl der Bytes der Funktionsargumente abrufen [Duplikat]

Nov 03 2020

Wie erhalte ich die Größe der Funktionsparameter in Byte? Beispiel: void DummyFun(int64_t a, int32_t b, char c);Die Größe in Bytes beträgt 13.

Ich versuche dies mithilfe von Vorlagen zu lösen, bin aber nicht sehr gut darin.

Dies ist der kontextualisierte Code und was ich bisher versucht habe:

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);  
    }
};

Antworten

2 TedLyngmo Nov 03 2020 at 12:57

In C ++ 17 können Sie einen Fold-Ausdruck verwenden :

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

Demo