调用模板功能时C ++模板扣除
-
26-10-2019 - |
题
FastDelegate
指 http://www.codeproject.com/kb/cpp/fastdelegate.aspx, ,但我认为这没有关系。
我有像以下的代码,并且有错误。
#include <FastDelegate.h>
using namespace fastdelegate;
template <typename T>
T Getter() {}
template <typename T>
void Setter(T) {}
template <typename T>
class Prop
{
public:
typedef FastDelegate0<T> Getter;
typedef FastDelegate1<T> Setter;
Prop(Getter getter, Setter setter) :
m_Getter(getter), m_Setter(setter)
{
}
private:
Getter m_Getter;
Setter m_Setter;
};
template <typename T>
inline Prop<T>* MakeProp(FastDelegate0<T> getter, FastDelegate1<T> setter)
{
return new Prop<T>(getter, setter);
}
static int Target = 0;
int main()
{
FastDelegate0<int> fdGetter(Getter<int>);
Prop<int>* c = MakeProp(fdGetter, Setter<int>);
// ^^^^ error: no matching function for call to 'MakeProp'
}
如果更改 main()
至:
int main()
{
FastDelegate0<int> fdGetter(Getter<int>);
FastDelegate1<int> fdSetter(Setter<int>);
Prop<int>* c = MakeProp(fdGetter, fdSetter); // It works.
}
或者:
int main()
{
FastDelegate0<int> fdGetter(Getter<int>);
Prop<int>* c = MakeProp<int>(fdGetter, Setter<int>); // It works, too.
}
我认为, MakeProp()
应该得到 T
来自fdgetter(是 int
, ,比所谓的创建者 FastDelegate1<int>
自动地。但事实并非如此。为什么?
PS我想保存getter和setter Prop
, ,欢迎对这种方法提出任何建议。在通过函数中传递参数时,复制fastdelegate*的实例也许是不好的。
解决方案
你有没有尝试过
Prop<int>* c = MakeProp(FastDelegate0<int>(Getter<int>), FastDelegate1<int>(Setter<int>));
?
Setter<int>
不能转换为 FastDelegate1<T>
!
不隶属于 StackOverflow