我试图获取第三方的库源代码,以便在Lubuntu的代码块中编译mingw,当我遇到"重载函数的地址而没有上下文类型信息"。
由于它是第三方图书馆,我不可能制作一个小例子,所以这里有定义:
namespace priv
{
template <typename T> SoundFileReader* createReader() {return new T;}
template <typename T> SoundFileWriter* createWriter() {return new T;}
}
错误发生在函数中:
template <typename T>
void SoundFileFactory::unregisterReader()
{
for (ReaderFactoryArray::iterator it = s_readers.begin(); it != s_readers.end(); )
{
if (it->create == &priv::createReader<T>) //Error occurs here
it = s_readers.erase(it);
else
++it;
}
}
从我能看到的是一个函数指针创建:
struct ReaderFactory
{
bool (*check)(InputStream&);
SoundFileReader* (*create)();
};
错误说明:
address of overloaded function with no contextual type information
从我可以确定它试图将模板函数的指针地址与保存在内存中的存储地址进行比较,并且编译器无法解析模板函数地址,但我无法理解为什么会出现只是该功能的一个声明。
在线搜索问题没有提供任何见解,因为所有示例代码都与这种情况不同,我不知道发生了什么,所以我不能自己解决。
出了什么问题以及如何解决?
更新
我已经把一些复制效果的代码放在一起了:
class VagueClass
{
int A;
};
class VagueFactory
{
public:
VagueClass* (*create)();
};
namespace priv
{
template <typename T> VagueClass* VagueFunction() {return new T;}
}
template<typename T>
void RandomFunction()
{
VagueFactory VagueVariable;
if(VagueVariable.create == &priv::VagueFunction<T>)
{
//Some message here
}
}
int main()
{
RandomFunction<int>();
return 0;
}