C++ 基于类型调用不同的函数

C++ 基于类型调用不同的函数,c++,templates,C++,Templates,我想做一些类似的事情 template<typename T> bool FetchVal(T & fetchedData) { //Get data from some function dataAsString = Get(); // based on type of T call fetchedData = ConvertToDouble(dataAsString); //or fetchedData = ConvertToInt(

我想做一些类似的事情

template<typename T>
bool FetchVal(T & fetchedData)
{
   //Get data from some function
   dataAsString = Get();

   // based on type of T call
   fetchedData = ConvertToDouble(dataAsString);
   //or
   fetchedData = ConvertToInt(dataAsString); 
   //and so on
}
使用模板是否可行?如果可行,如何实现

编辑:基本上我是在分析一个XML,在get中是一个标记,这个字符串现在需要转换为int/double/。。。基于预期的类型,即。fetchedData的类型希望这能说明问题


大卫已经给出了一个答案,它确实应该起作用。如果可能的话,有没有更优雅的方法不使用typeid,因为我记得在某个地方读到过,这个调用可能会导致性能下降?

一种简单的方法可以使用输出参数来完成您想要的操作:

template<typename T>
bool FetchVal(T & fetchedData)
{
   // Get data from some function
   dataAsString = Get();

   Convert(dataAsString, fetchedData);
}

然后,您可以根据需要使用任意多个Convert实现。

您可以使用以下模板:

template<typename T>
bool FetchVal(T & fetchedData)
{
   //Get data from some function
   dataAsString = Get();

   stringstream ss(dataAsString);
   ss >> fetchdData;
}
#include <iostream>

using namespace std;

class X{

  public:

    void fnX(const string& data){cout<<" in X "<<data<<endl;}

};


class Y{

  public:

    void fnY(const string& data){cout<<" in Y "<<data<<endl;}

};

typedef void (X::*FnXType)(const string&);

typedef void (Y::*FnYType)(const string&);

template<typename T, typename Fnc>
bool FetchVal(T & fetchedData, Fnc fnc)
{
   //Get data from some function
   //dataAsString = Get();
   string dataAsString("data");

   (fetchedData.*fnc)(dataAsString);
}

int main()
{
    X objX;
    FnXType fncX = &X::fnX;
    FetchVal<X, FnXType>(objX, fncX);

    Y objY;
    FnYType fncY = &Y::fnY;
    FetchVal<Y, FnYType>(objY, fncY);

}

再多解释一下您要实现的目标会有很大帮助。众所周知,XML很难解析。只需找到一个现成的解析器即可使用。@Arun请检查我的解决方案的通用实现,您可以在这行上创建一些东西。