C++ 不同对象类型之间的参数传递
我想将一些参数从一个对象传递到另一个对象。对象的类型不同。我尝试了一些方法,但没有一种是有效的。所有类型都已给定,无法更改 我想使用C++ 不同对象类型之间的参数传递,c++,templates,c++14,std-function,C++,Templates,C++14,Std Function,我想将一些参数从一个对象传递到另一个对象。对象的类型不同。我尝试了一些方法,但没有一种是有效的。所有类型都已给定,无法更改 我想使用std::bind,std::function,std::mem\u fn和/或lambdas。但我没有找到正确的混合物 有没有办法编写一个模板函数来实现这一点 (Visual Studio 2017) #包括 类Type1{}; 类类型2{}; 类别类型3{}; 甲级 { 公众: bool getter(Type1&)const{return true;} boo
std::bind
,std::function
,std::mem\u fn
和/或lambdas。但我没有找到正确的混合物
有没有办法编写一个模板函数来实现这一点
(Visual Studio 2017)
#包括
类Type1{};
类类型2{};
类别类型3{};
甲级
{
公众:
bool getter(Type1&)const{return true;}
bool getter(Type2&)const{return true;}
bool getter(Type3&,int index=0)const{return true;}
};
B类
{
公众:
布尔设置器(常量Type1&{return true;}
布尔设置器(常量Type2&{return true;}
布尔设置器(consttype3&{return true;}
布尔设置器(consttype3&,int){return true;}
};
无效测试()
{
A A;
B B;
//与此相反:
类型3数据;
if(a.getter(数据))
{
b、 设定器(数据);
}
//我需要这样的东西(同上):
函数(a,a::getter,b,b::setter);
};
不确定这是否是您真正想要的,但是
template <typename T3, typename T1, typename T2>
void function(const T1& t1, bool(T1::*getter)(T3&) const,
T2& t2, bool(T2::*setter)(const T3&))
{
T3 data;
if ((t1.*getter)(data))
{
(t2.*setter)(data);
}
}
模板
空函数(常数T1&T1,bool(T1::*getter)(T3&)常数,
T2和T2,布尔(T2::*setter)(常数T3和)
{
T3数据;
if((t1.*getter)(数据))
{
(t2.*设定器)(数据);
}
}
用法与
function<Type3>(a, &A::getter, b, &B::setter);
函数(a,&a::getter,b,&b::setter);
注意:我删除了
int index=0
它根本不清楚您想要函数
做什么。如果只是为了转移一个Type3
,那么它没有明显的意义。如果希望它处理不同的getter/setter对,则需要以某种方式指定哪一对。若你们想让它处理所有对,你们需要枚举它们。你们想让这个函数做什么?如果不使用模板,为什么要标记模板标签?你为什么不把注意力集中在你需要的东西上呢?我想我已经试过了(或者类似的东西)。但不幸的是,它给出了VS2017的一个错误:错误C2872:“函数”:不明确的符号注:可能是“void function(const T1&,bool(uu cdecl T1::*)(T3&))const,T2&,bool(u cdecl T2::*)(const T3&)”我提供了工作链接…是的,我在在线演示中看到并尝试了,但VS2017不喜欢它。对不起。这是名称冲突。它很好用。谢谢你的建议。
function<Type3>(a, &A::getter, b, &B::setter);