Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++11 如何声明模板化方法的模板化指针?_C++11_Templates_Using_Pointer To Member - Fatal编程技术网

C++11 如何声明模板化方法的模板化指针?

C++11 如何声明模板化方法的模板化指针?,c++11,templates,using,pointer-to-member,C++11,Templates,Using,Pointer To Member,模板化的typedefs可以通过使用。如何直接生成模板化方法指针 例如: class MyClass { template<bool B> void fnc() { /*...*/ }; // Now I can do: template<bool B> using TempPtr = decltype(&MyClass::fnc<B>); // ^^^^^^^^^^^^^^^^^^^^^^^^^^ }

模板化的
typedef
s可以通过
使用
。如何直接生成模板化方法指针

例如:

class MyClass {

  template<bool B> void fnc() { /*...*/ };

  // Now I can do:
  template<bool B>
  using TempPtr = decltype(&MyClass::fnc<B>);
  //              ^^^^^^^^^^^^^^^^^^^^^^^^^^
};

(后续问题:我可以使用
temptr
作为模板参数吗?

这些将起作用,给出稍微不同的行为:

template<bool B>
using Ptr = void (MyClass::*)();

using Ptr2 = void (MyClass::*)();

// alternatively
//typedef void (MyClass::*Ptr2)();

这也是非模板的
Ptr2
也可以正常工作的原因。

强制性的“为什么您会想要它”:D不管怎样,您确定实际成员函数需要模板部分吗?@BartekBanachewicz我正在研究一种新的元编程模式。
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>;
MyClass::Ptr<false> ptr = &MyClass::fnc<true>;