我很难将指向成员函数Outer<T>::foo
的指针传递给嵌套类Outer
的构造函数,如下所示(另请参阅ideone)。
template<typename T1>
struct Outer
{
void foo()
{
}
Outer() : inner( &Outer::foo ) // ERROR: compiles without &Outer::foo and Inner( F f ), below
{
}
template<typename T2, void (T2::*F)()>
struct Inner
{
Inner( F f ) // ERROR
{
}
};
Inner<Outer,&Outer::foo> inner;
};
int main()
{
Outer<int> outer;
}
我做错了什么?我开始怀疑这是否可能。
答案 0 :(得分:5)
问题是你正在混淆变量和模板参数。您可以使用常量指针作为模板参数,也可以将变量指针作为参数传递给函数。
这有效:
template<typename T1>
struct Outer
{
void foo()
{
}
Outer() : inner( &Outer::foo )
{
}
template<typename T2>
struct Inner
{
// Takes a pointer at runtime to any matching signature in T2
Inner( void (T2::*f)( ) )
{
}
};
Inner<Outer> inner;
};
int main()
{
Outer<int> outer;
}
或者这样做:
template<typename T1>
struct Outer
{
void foo()
{
}
Outer() : inner( )
{
}
// Takes a pointer at compile time to a matching function in T2
template<typename T2, void (T2::*f)()>
struct Inner
{
Inner( )
{
}
};
Inner<Outer,&Outer::foo> inner;
};
int main()
{
Outer<int> outer;
}