我正在尝试做的事情:我有一个模板对象传入,作为一个接口的一部分,应该有一个"进程"函数定义了一些参数(我不知道有多少),其中一些是模板参数.
即
struct A { static void process(int a); };
struct B { template <typename B0> static void process(int a, B0 b0); };
Run Code Online (Sandbox Code Playgroud)
都是有效的处理程序.所以现在我需要检测处理程序的签名:静态类型参数和许多模板参数.
为此,我使用了许多模板魔术黑客,可以缩小到有问题的部分 - 检测一些模板args(或只是检索模板化签名).
我试图找出所需信息的方法是使用描述的方法检查明确专用的签名是否可以编写模板来检查函数的存在?
struct _D;
template <typename T>
struct get_template_args_count
{
private:
template <int count> struct R { enum { value = count }; };
template <typename C>
static R<0> retrieve(decltype(&C::process));
template <typename C>
static R<1> retrieve(decltype(&C::template process<_D>));
template <typename C>
static R<-1> retrieve(...);
public:
typedef decltype(retrieve<T>(nullptr)) Result;
enum { value = …Run Code Online (Sandbox Code Playgroud)