小编Dan*_*iel的帖子

不带参数的模板参数包扩展

我正在努力理解 C++ 中的模板参数包扩展。出于演示目的,我想编写一个函数来打印签名中使用的类型的人类可读名称(任何签名 - 这就是可变参数模板的用武之地)。

#include <boost/type_index.hpp>
std::string SignatureToString()
{
  return std::string();
}

template<typename Arg1, typename... Args> 
std::string SignatureToString(const Arg1&, Args&&... args)
{
  std::string strRetVal = boost::typeindex::type_id<Arg1>().pretty_name();
  std::string strRemainingSignature = SignatureToString(args...);          // expanding parameters works
  if (!strRemainingSignature.empty())
  {
    strRetVal = strRetVal + ", " + strRemainingSignature;
  }
  return strRetVal;
}

class cDog {/* ... */};

int main(int /*argc*/, char* /*argv*/[])
{
  int i(0);
  std::string str;
  //cDog someDog("Harry"); // don't want to construct this dummy object!
  std::cout << "GetSignature(): '" << …
Run Code Online (Sandbox Code Playgroud)

c++ templates variadic-functions

0
推荐指数
1
解决办法
280
查看次数

标签 统计

c++ ×1

templates ×1

variadic-functions ×1