我正在尝试执行以下操作:从函数中本地定义的类中获取成员函数的地址。
class ConnectionBase
{
};
template class<EventType, SinkType>
class ConnectionImpl : public ConnectionBase
{
public:
typedef void (SinkType::*EventCallback)(EventType const&);
};
template<class EventType>
class Source
{
template <class SinkType>
boost::shared_ptr<ConnectionBase> setupCallback(typename ConnectionImpl<EventType, SinkType>::EventCallback func, SinkType* sink)
{
// do the actual connecting.
}
};
class SomeClass
{
public:
void someFunction(int const& event){}
}
class SomeUnitTest
{
public:
void someTest()
{
class NestedClass
{
public:
void someFunction(int const& event){}
};
NestedClass nc;
//Try#1 - This does not work
setupCallback<int, NestedClass>(&NestedClass::someFunction, &nc);
//Try #2 - This also does not work
setupCallback<int, NestedClass>(&SomeUnitTest::someTest::NestedClass::someFunction, &nc);
//Try #3 - Following the GCC error output, I tried this
setupCallback<int, NestedClass>(&SomeUnitTest::someTest()::NestedClass::someFunction, &nc);
SomeClass sc;
//This works fine, as expected
setupCallback<int, SomeClass>(&SomeClass::someFunction, &sc);
}
};
尝试 #2 和 #3 完全混淆 GCC,它不知道我要做什么。Try #1 会生成一条更有用的错误消息,指出不存在 setupCallback,其形式为“setupCallback(void (SomeUnitTest::someTest()::NestedClass::SomeFunction::*), etc) 这就是 try #3 的诞生方式。
我真的找不到很多关于函数内部定义的类的信息,有没有人知道正确的语法,并且可能有讨论这个主题的资源?
好的,看来这已经解决了,正如两位发帖人所指出的,本地类没有链接,它不能工作。现在知道了这一点,我发现这篇文章讨论了这个问题,对于遇到这个问题并偶然发现这个问题的任何人:http: //www.informit.com/guides/content.aspx? g=cplusplus&seqNum=420
编辑:setupCallback() 的说明,使用更常规的类的工作示例
编辑#2:更新措辞以将“嵌套”更改为“本地”。为 setupCallback 添加了更多详细信息。
编辑#3:添加了更多信息的链接。谢谢大家。