sizeof(variadic pack...)
От: niXman Ниоткуда https://github.com/niXman
Дата: 26.10.17 14:17
Оценка:
привет!

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

зарукоблудил такое:

#include <iostream>
#include <tuple>

template<typename... Args>
constexpr std::uint8_t sizeofargs(const Args&...) {
#pragma pack(push, 1)
    struct tt { std::tuple<typename std::decay<Args>::type...> t; };
#pragma pack(pop)

    return sizeof...(Args) ? sizeof(tt) : 0;
}

int main(int argc, char **argv)
{
    std::cout << (int)sizeofargs() << std::endl;
    std::cout << (int)sizeofargs(argc) << std::endl;
    std::cout << (int)sizeofargs(argc, argv) << std::endl;
}

но как результат получаю такое:
0
4
16

где первые два верны, а последний — нет. похоже, что из-за выравнивания на 8. и #pragma pack(push, 1), в данном случае, почему-то, не помогает...

как победить? можно использовать С++11. (про fold expression знаю...)
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.