dyo*_*mas 23 c++ gcc templates clang++
我的问题的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()
{
}
Run Code Online (Sandbox Code Playgroud)
此代码在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()
~~~~~~~~~~~~~~~~~~~~~~~~~^
Run Code Online (Sandbox Code Playgroud)
在clang ++中.为什么?
在课堂上,电话定义解决了这个问题,我知道.任何非指针方法模板都可以在任何地方正常工作.使用template/typename的实验没有结果.
alw*_*ent -2
您可以在类定义中移动方法的实现:
template <class T> class MyClass
{
template <void (MyClass::*M)() const> struct wrapper
{
virtual void call(){/* move implementation here */};
};
};
Run Code Online (Sandbox Code Playgroud)