gpt4 book ai didi

c++ - 指向模板方法的指针给出 <未解析的重载函数类型>)

转载 作者:搜寻专家 更新时间:2023-10-31 01:08:44 25 4
gpt4 key购买 nike

我读过许多有类似问题的人的问题,但大多数时候他们归结为人们使用函数指针而不是方法指针,或者在创建指针实例时省略类作用域。但是我没有做这些(我认为......):

class Test
{
public:
Test() { mFuncPtrs.insert( 10, &Test::Func<int> ); } // Error!

template <class T>
void Func() {}

private:
typedef void ( Test::*FuncPtr )();
std::map<int, FuncPtr> mFuncPtrs;
};

但这给出了:

error: no matching function for call to ‘std::map<int, void (Test::*)(), std::less<int>, std::allocator<std::pair<const int, void (Test::*)()> > >::insert(int, <unresolved overloaded function type>)’

但我对模板类型很明确,提供了方法的全部范围,并且 Func() 没有重载!如果有任何不同,我使用的是 g++ v4.1.2。

最佳答案

您错误地使用了 std::mapinsert() 函数。 insert() 没有将键和值作为两个单独参数的重载。

相反,您需要在键和值的 std::pair 上调用它:

mFuncPtrs.insert(std::make_pair(10, &Test::Func<int>) );

或者,在 C++11 中,您可以对对使用统一的初始化语法:

mFuncPtrs.insert( { 10 , &Test::Func<int> } );

不过,最简单的方法是完全避免 insert() 并只使用索引运算符:

mFuncPtrs[10] = &Test::Func<int>;

更好的是,考虑到所有这些都发生在构造函数中,即在 map 的初始化时,同样在 C++11 中,您可以初始化 map 与您想要:

class Test
{
public:
Test()
: mFuncPtrs { { 10 , &Test::Func<int> } }
{ }

/* ... */
};

关于c++ - 指向模板方法的指针给出 <未解析的重载函数类型>),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17701631/

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