Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 不同对象类型之间的参数传递_C++_Templates_C++14_Std Function - Fatal编程技术网

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);