typedef
可以模仿using
。如何直接制作模板化方法指针?
示例:
class MyClass {
template<bool B> void fnc() { /*...*/ };
// Now I can do:
template<bool B>
using TempPtr = decltype(&MyClass::fnc<B>);
// ^^^^^^^^^^^^^^^^^^^^^^^^^^
};
如何在没有decltype
的情况下直接编写带下划线的部分?
到目前为止,我已经尝试过:
template<bool B>
using TempPtr = template<bool> void (MyClass::*)();
template<bool B>
using TempPtr = void (MyClass::*<B>)();
...
(后续问题:我可以使用TempPtr
作为模板模板参数吗?)
答案 0 :(得分:1)
这些会起作用,行为略有不同:
template<bool B>
using Ptr = void (MyClass::*)();
using Ptr2 = void (MyClass::*)();
// alternatively
//typedef void (MyClass::*Ptr2)();
使用:
MyClass::Ptr<true> ptr = &MyClass::fnc<true>;
MyClass::Ptr2 ptr2 = &MyClass::fnc<true>;
Ptr
中的bool参数与fnc
中的参数不同。由于模板类型不是签名的一部分,不匹配将很好地绑定,但可以用于其他目的:
MyClass::Ptr<false> ptr = &MyClass::fnc<true>;
这也是为什么非模板Ptr2
也能正常工作的原因。