gpt4 book ai didi

调用模板函数时进行 C++ 模板推导

转载 作者:太空宇宙 更新时间:2023-11-04 14:20:52 24 4
gpt4 key购买 nike

FastDelegatehttp://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> 的构造函数。但它没有。为什么?

附言我想将 getter 和 setter 保存在 Prop 中, 欢迎对这种方法提出任何建议。在函数中传递参数时复制 FastDelegate* 的实例可能是不好的。

最佳答案

你试过吗

Prop<int>* c = MakeProp(FastDelegate0<int>(Getter<int>), FastDelegate1<int>(Setter<int>));

?

Setter<int>无法转换为 FastDelegate1<T> !

关于调用模板函数时进行 C++ 模板推导,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7810701/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com