如何实现一个函数,将一个字符串转化成各种类型

怎么实现一个函数,将一个字符串转化成各种类型
例如如下伪方法,但是

#include<stdio.h>
#include<stdlib.h>


[xxxx type] get_value(char * str, char * type)
{
    if(strcmp(type, "int") == 0)
    {
        return atoi(str);
    }else if(strcmp(type,"float") == 0)
   {
        return atof(str);
   }

}


int main()
{
   char *x = "33.01";
   float t=0;
   //t = atof(x);
    get_value(x, "float");
   printf("%f\n", t);

}


怎么修改上面代码能运行正确或其他实现方式?

------解决方案--------------------
boost 中有一个 lexical_cast 就是完成这个功能的. 
只不过类型是模板参数, 不是字符串, 比如:

int x = boost::lexical_cast<int>("123");
float v = boost::lexical_cast<float>("456.43");
std::string z = boost::lexical_cast<std::string>(234);

其实原理也非常简单, 就是源类型输出到流中, 再从流中读取目标类型.
------解决方案--------------------
#include <stdio.h>
#include <string.h>
void *get_value(char * str, char * type) {
    static int i;
static float f;
static double d;
if (strcmp(type, "int") == 0) {
sscanf(str,"%d",&i);
        return &i;
    } else if (strcmp(type,"float") == 0) {
sscanf(str,"%f",&f);
        return &f;
    } else if (strcmp(type,"double") == 0) {
sscanf(str,"%lf",&d);
        return &d;
    }
return NULL;
}
int main() {
char *x = "33.0123456789";
void *pv;