gpt4 book ai didi

c++ - 无法推断 VS 2010 中的模板参数

转载 作者:行者123 更新时间:2023-11-30 02:57:31 26 4
gpt4 key购买 nike

在 VS 2005 中这段代码工作正常,但在 VS 2010 中我有错误“无法从‘std::queue<_Ty> *’推断出‘T *’的模板参数”

我不明白这是什么问题?请帮帮我...

#include <string>
#include <queue>
using namespace std;
template<typename T, typename R, typename P1>
int bindthis(T* obj, R (T::*func)(P1))
{
return 1;
}
int _tmain(int argc, _TCHAR* argv[])
{
std::queue<std::wstring> queue_;

bindthis(&queue_, &std::queue<std::wstring>::push);
return 0;
}

最佳答案

我不确定 Visual Studio,但在 GCC 中,此函数在 C++03 模式下编译,而不是在 C++11 模式下编译,所以我想问题是一样的。

问题是在 C++11 中,重载被添加到 std::queue::push ,所以编译器不知道选择哪个重载。有两种方法可以解决此问题:

  1. 明确指定模板参数:

    bindthis<std::queue<std::wstring>, void, const std::wstring&>(&queue_, &std::queue<std::wstring>::push);
  2. 将函数指针转换为所需的类型 void (std::queue<std::wstring>::*)(const std::wstring&) ,以便选择正确的重载:

    typedef void (std::queue<std::wstring>::*push_func_ptr)(const std::wstring&);
    bindthis(&queue_, static_cast<push_func_ptr>(&std::queue<std::wstring>::push));

关于c++ - 无法推断 VS 2010 中的模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14566025/

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