sizeof可变参数模板(所有元素的sizeof之和)

Vin*_*ent 6 c++ tuples sizeof variadic-templates c++11

考虑以下功能:

template<typename... List> 
inline unsigned int myFunction(const List&... list)
{
    return /* SOMETHING */; 
}
Run Code Online (Sandbox Code Playgroud)

什么是最简单的事情而不是/* SOMETHING */为了返回sizeof所有参数的总和?

例如 myFunction(int, char, double) = 4+1+8 = 13

Mik*_*our 13

unsigned myFunction() {return 0;}

template <typename Head, typename... Tail>
unsigned myFunction(const Head & head, const Tail &... tail) {
    return sizeof head + myFunction(tail...);
}
Run Code Online (Sandbox Code Playgroud)

  • @PiotrNycz:是的,如果你需要在头文件中定义非模板重载,那么它需要是`inline`.但这与问题无关. (7认同)
  • @PiotrNycz:`inline`作为优化的东西,只是一个提示.而已.我个人认为代码清晰度远远超过暗示,然后`inline`应该更好地保留它的一个保证效果,即它的ODR效果. (2认同)

T.C*_*.C. 8

在C++ 17中,使用折叠表达式:

template<typename... List> 
inline constexpr unsigned int myFunction(const List&... list)
{
    return (0 + ... + sizeof(List));
}
Run Code Online (Sandbox Code Playgroud)