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
O que significa um erro “Não é possível encontrar o símbolo” ou “Não é possível resolver o símbolo”?
Christopher Nolan uma vez se arrependeu de ter lido o 'roteiro de Pulp Fiction' de Quentin Tarantino