C++ C+有问题+;可变模板参数
我正在尝试编写一个通用函数,用于记录一些用于调试的内容,我想调用它,例如:C++ C+有问题+;可变模板参数,c++,parameters,variadic-templates,variadic-functions,variadic,C++,Parameters,Variadic Templates,Variadic Functions,Variadic,我正在尝试编写一个通用函数,用于记录一些用于调试的内容,我想调用它,例如: Log(“auo”,34)//作者:auo34 点-点; 点X=10; 点Y=15; 对数(35,点,10)//写入:35{10,15}10 然而,我在参数打包和解包方面遇到了各种各样的问题,我似乎无法掌握它的窍门。以下是完整代码: struct Point { long X, Y; } std::ofstream debugStream; template<typename ...Rest>
Log(“auo”,34)//作者:auo34
点-点;
点X=10;
点Y=15;
对数(35,点,10)//写入:35{10,15}10
然而,我在参数打包和解包方面遇到了各种各样的问题,我似乎无法掌握它的窍门。以下是完整代码:
struct Point {
long X, Y;
}
std::ofstream debugStream;
template<typename ...Rest>
void Log(Point first, Rest... params) { //specialised for Point
if (!debugStream.is_open())
debugStream.open("bla.log", ios::out | ios::app);
debugStream << "{" << first.X << ", " << first.Y << "}";
Log(params...);
}
template<typename First, typename ...Rest>
void Log(First first, Rest... params) { //generic
if (!debugStream.is_open())
debugStream.open("bla.log", ios::out | ios::app);
debugStream << first;
Log(params...);
}
结构点{
长X,Y;
}
std::流调试流;
模板
无效日志(点优先,其余…参数){//专门用于点
如果(!debugStream.is_open())
debugStream.open(“bla.log”,ios::out | ios::app);
debugStream采用以下简化版本:
void print() {}
template<typename First, typename... Rest>
void print(const First& first, const Rest&... rest)
{
std::cout << first;
print(rest...);
}
void print(){}
模板
无效打印(常数优先和第一,常数剩余和…剩余)
{
std::当参数包为空时,是否需要为最后一次递归调用提供一个基本情况,并计算对Log()
的调用。添加void Log(){}
重载就足够了。