SSCCE我的问题是:
template <class T> class MyClass
{
template <void (MyClass::*M)() const> struct wrapper
{
virtual void call();
};
};
template <typename T>
template <void (MyClass<T>::*M)() const>
void MyClass<T>::wrapper<M>::call()
{
}
此代码在 gcc 中编译但失败并出现错误:
error: nested name specifier 'MyClass<T>::wrapper<M>::' for declaration does not refer into a class, class template or class template partial specialization
void MyClass<T>::wrapper<M>::call()
~~~~~~~~~~~~~~~~~~~~~~~~~^
在铿锵++中。 为什么?
call 类中的定义解决了这个问题,我知道。任何非指向方法的模板在任何地方都可以正常工作。 template/typename 的实验没有结果。
最佳答案
可能的解决方法:考虑使用 std::function 代替包装器。它不完全相同(对可接受的函数指针的约束较少),但它会在 clang++ 上编译并简化您的代码。
#include <functional>
template <class T> class MyClass
{
typedef std::function<void(void) const > wrapper;
};
关于c++ - 未在 clang++ 中编译的具有指向方法的指针的嵌套模板类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31711926/