我正在努力理解 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)