gpt4 book ai didi

C++模板化构造函数错误

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:11:16 26 4
gpt4 key购买 nike

更多模板化问题...我喜欢 C++,但有时我讨厌它。

我不明白为什么编译器会在这里提示,以及我能做些什么。

struct blah
{
template<class t>
blah(void(*)(t), t){}
};

void Func(int i) {}
void Func2(int& i) {}

void test()
{
int i = 3;
blah b(Func, i);
blah b2(Func2, i); //error C2660: 'blah::blah' : function does not take 2 arguments
blah b3(Func2, (int&)i); //error C2660: 'blah::blah' : function does not take 2 arguments

}

这是怎么回事?

我正在使用 MSVC2008。

最佳答案

其他答案解释了发生了什么:当模板参数推导找到两种推导模板参数的方法时,它会单独查看每一种,并且它们都必须完全一致。

通过确保 t 的第二次使用是在“非推导上下文”中,您可能可以使此类按预期方式工作:

template<typename T>
struct identity { typedef T type; };

struct blah
{
template<class t>
blah(void(*)(t), typename identity<t>::type){}
};

这样当 blah 构造函数被调用时,C++ 将从函数指针推导 t,但不会尝试从第二个参数推导它。然后推导的类型在两个地方被替换。

关于C++模板化构造函数错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17369972/

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