64,281
社区成员
发帖
与我相关
我的任务
分享
比如我想写一个类型安全的printf之类的? 对于 C++ 来说,你有这样的需求通常意味着的你解决问题的思路有问题,把你的原始问题也就是你想用这样的函数来解决的问题拿出来,肯定有 C++ 的方式来解决它。
对于 C++ 来说,你有这样的需求通常意味着的你解决问题的思路有问题,把你的原始问题也就是你想用这样的函数来解决的问题拿出来,肯定有 C++ 的方式来解决它。
比如我想写一个类型安全的printf之类的? [quote=引用 7 楼 rocktyt2 的回复:] [quote=引用 6 楼 zhcosin 的回复:] 对于 C++ 来说,你有这样的需求通常意味着的你解决问题的思路有问题,把你的原始问题也就是你想用这样的函数来解决的问题拿出来,肯定有 C++ 的方式来解决它。
比如我想写一个类型安全的printf之类的? [quote=引用 9 楼 zhcosin 的回复:] [quote=引用 7 楼 rocktyt2 的回复:] [quote=引用 6 楼 zhcosin 的回复:] 对于 C++ 来说,你有这样的需求通常意味着的你解决问题的思路有问题,把你的原始问题也就是你想用这样的函数来解决的问题拿出来,肯定有 C++ 的方式来解决它。
比如我想写一个类型安全的printf之类的? [quote=引用 7 楼 rocktyt2 的回复:] [quote=引用 6 楼 zhcosin 的回复:] 对于 C++ 来说,你有这样的需求通常意味着的你解决问题的思路有问题,把你的原始问题也就是你想用这样的函数来解决的问题拿出来,肯定有 C++ 的方式来解决它。
#include <stdio.h>
#include <stdarg.h>
void testit ( int i, ...)
{
va_list argptr;
va_start(argptr, i);
if ( i == 0 ) {
int n = va_arg( argptr, int );
printf( "%d\n", n );
} else {
char *s = va_arg( argptr, char* );
printf( "%s\n", s);
}
}
int main()
{
testit( 0, 0xFFFFFFFF ); // 1st problem: 0xffffffff is not an int
testit( 1, NULL ); // 2nd problem: NULL is not a char*
}
自己制定一下fmt作为第一个参数, 解析fmt以便了解函数的参数栈上都是什么类型的变量.
#include <string>
#include <iostream>
using namespace std;
void do_job(int x) {
cout << "do_job(int " << x << ")" << endl;
}
void do_job(float x) {
cout << "do_job(float " << x << ")" << endl;
}
void do_job(string x) {
cout << "do_job(string " << x << ")" << endl;
}
void func() {
cout << "func(empty), recursion finished" << endl;
}
template<typename first_t, typename...rest_t>
void func(first_t first, rest_t... rest) {
do_job(first);
func(rest...);
}
int main() {
string a="a"; int b=10; float c=20.0;
func(a,b,c);
}
输出: http://ideone.com/t0r5Hj
template <typename T, typename ... Ts>
void func(T t, Ts ... ts)
{
...
}
比如我想写一个类型安全的printf之类的? [quote=引用 6 楼 zhcosin 的回复:] 对于 C++ 来说,你有这样的需求通常意味着的你解决问题的思路有问题,把你的原始问题也就是你想用这样的函数来解决的问题拿出来,肯定有 C++ 的方式来解决它。
比如我想写一个类型安全的printf之类的? 对于 C++ 来说,你有这样的需求通常意味着的你解决问题的思路有问题,把你的原始问题也就是你想用这样的函数来解决的问题拿出来,肯定有 C++ 的方式来解决它。