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请检查我的解决方案的通用实现,您可以在这行上创建一些东西。