Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C+有问题+;可变模板参数_C++_Parameters_Variadic Templates_Variadic Functions_Variadic - Fatal编程技术网

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(){}
重载就足够了。