你不需要在这里删除类型,所以正确的类型和模板可以完成这项工作:
void getInt(int& out, double src) { out = src; }
void getDouble(double& out, double src) { out = src; }
struct twoInt{int a; int b;};
void getTwoInt(twoInt& v, double src)
{
v.a = src;
v.b = static_cast<int>(src * 10) % 10;
}
template <typename F, typename T>
void getData(F f, T& val)
{
double dataSource = 2.1;
f(val, dataSource);
}
int main()
{
int valI;
getData(getInt, valI);
std::cout << "Int: " << valI << std::endl;
double valD;
getData(getDouble, valD);
std::cout << "Double: " << valD << std::endl;
twoInt valTwoInt;
getData(getTwoInt, valTwoInt);
std::cout << "Int1: " << valTwoInt.a << ", Int2: " << valTwoInt.b <<std::endl;
}
Demo