C++ 98 实现 可变参数模板
时间: 2023-10-20 13:14:58 浏览: 125
C++98 没有可变参数模板的语法支持,但可以通过宏定义和函数重载来实现类似的功能。
下面是一个简单的例子:
```cpp
#include <iostream>
#define PRINT_ARG_COUNT(...) std::cout << "Number of arguments: " << ARG_COUNT(__VA_ARGS__) << std::endl
#define ARG_COUNT(...) ARG_COUNT_IMPL(__VA_ARGS__, 5,4,3,2,1)
#define ARG_COUNT_IMPL(_1,_2,_3,_4,_5,N,...) N
void print() {}
template <typename T, typename... Args>
void print(T firstArg, Args... args) {
std::cout << firstArg << " ";
print(args...);
}
int main() {
PRINT_ARG_COUNT(1, 2, "hello", true);
print(1, 2, "hello", true);
return 0;
}
```
这个例子中,我们使用了两个宏定义,`ARG_COUNT` 和 `PRINT_ARG_COUNT`。`ARG_COUNT` 宏定义了一个函数参数的最大数量,然后定义了一个实际的计算参数数量的宏 `ARG_COUNT_IMPL`。在函数模板 `print` 中,我们使用了可变参数模板,通过递归调用函数来打印每个参数。在 `main` 函数中,我们使用了 `PRINT_ARG_COUNT` 来打印参数数量,并且在调用 `print` 函数时,我们传递了一些参数。
注意,这个例子中的宏定义和函数重载是 C++98 实现可变参数模板的一种方法,但是这种方法存在一些限制和风险。建议在 C++11 及以上版本中使用官方支持的可变参数模板语法。
阅读全文