Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.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++_Function - Fatal编程技术网

将参数从一个函数传递到另一个函数(无模板)-C++; 问题: 是否有一种方式将C++中的“发件人”函数的参数传递给“接收者”函数? 期望/理论

将参数从一个函数传递到另一个函数(无模板)-C++; 问题: 是否有一种方式将C++中的“发件人”函数的参数传递给“接收者”函数? 期望/理论,c++,function,C++,Function,在本例中: •println是“发送者”功能,并且 •打印是“接收器”功能 print函数接受println函数的所有参数,如示例…语法所示 上下文 我知道C++中的模板函数,以及如何将前一个例子纠正为 void print(const char); void print(char[], unsigned); // They’ve been defined before already… template <typename... types> void println(type

在本例中:
println
是“发送者”功能,并且
打印
是“接收器”功能

print
函数接受
println
函数的所有参数,如示例
语法所示


上下文 <>我知道C++中的模板函数,以及如何将前一个例子纠正为

void print(const char);
void print(char[], unsigned); // They’ve been defined before already…

template <typename... types>
void println(types... arguments) { print(arguments...); print('\n'); std::fflush(stdout); }
无效打印(常量字符);
无效打印(字符[],未签名);//它们以前已经定义过了…
模板
void println(类型…参数){print(参数…;print('\n');std::fflush(stdout);}
但是我想看看是否有其他方法可以解决这个问题——没有最近的C++特性——例如:这个问题是如何在C中解决的


<>我以C风格的方式(C++中使用C++特性)代码,因为我想知道如何自己构建C++特性。 这个问题在C语言中是如何解决的

在C语言中使用宏。只包含
的函数宏,并将参数传递给函数:

#define println(...)  do { \
        print(__VA_ARGS__); \
        print('\n'); \
        std::fflush(stdout); \
} while(0)
有一个限制-根据ISO C标准,不允许在没有任何参数的情况下调用此类函数宏

在C中,通常使用一个将
##
预处理器操作符应用于
u VA_uargs_uu
并将附加参数传递给
print
函数,如
u func_u
u行u
u文件u
,以进行调试。比如ex.或or(只是短时间谷歌搜索的一些初步结果)


看起来很相似很相似。。。对于这个问题,我可以尝试几种方法。我会再多呆一会儿,看看是否还有更多的答案。。。否则,我将关闭这个问题,然后“我想知道如何构建C++特性”->每次调用“<代码> PrtLn< <代码> >不同的代码>类型>…/>代码时,从模板中实例化一个新函数。你可以直接这样做(也创建两个
println
重载)@Artyer是的,但是如果不止有几个
print
函数具有
println
变量,那该怎么办?嗯,如果我不想全局定义
println
宏呢?这里有一个不切实际的例子:我在本地名称空间中创建了一个
print
函数,并希望它具有依赖于
print
函数的
printf
println
变体,但是将
printf
定义为宏完全覆盖了C标准库提供的原生
printf
函数。我不理解这个问题。“全球定义”是什么意思?你如何定义“非全球”?你自己没回答吗?在C语言中,没有名称空间,有时名称冲突。请选择一个唯一的名称。啊,对不起。我使用C++,所以有代码>命名空间< /Cord>范围,允许变量和函数在命名空间内单独定义。
#define println(...)  do { \
        print(__VA_ARGS__); \
        print('\n'); \
        std::fflush(stdout); \
} while(0)
#define println(str, ...)  do { \
        print("%s:%d: " str "\n", __FILE__, __LINE__, ##__VA_ARGS__); \
        fflush(stdout); \
} while(0)