由于 C 不支持模板或 typeid,您有点卡住了。
我能想到的最好/最简单的方法是为您希望使用的每种参数类型创建一个 C 函数版本。
void write_int( int i )
{
myclass obj;
obj.write(i);
}
void write_string( char * s )
{
myclass obj;
obj.write(s);
}
另一种选择可能是打开类型并传递一个 void* 指针。
void write( int type, void* ptr )
{
myclass obj;
switch(type)
{
case C_INT:
obj.write( *static_cast<int*>(ptr) );
break;
case C_STR:
obj.write( *static_cast<char**>(ptr) );
break;
default:
//Some kind of error.
}
}
最后一个选择是使用 var args 函数做一些诡计:
void write( int type, ... )
{
va_list argp;
va_start( argp, type);
myclass obj;
switch(type)
{
case C_INT:
obj.write( va_arg(argp, int) );
break;
case C_STR:
obj.write( va_arg(argp, char* ) );
break;
default:
//Some kind of error.
}
}
您可以通过定义隐藏函数的宏来检测其中的一些使用错误:
#define write(X,Y) write(X,Y)
这意味着使用错误数量的参数应该会产生错误。