【发布时间】:2014-07-30 19:02:59
【问题描述】:
我正在编写一个包含成员函数的模板类,以减少一些调用 - 如果某些条件为真,则不需要调用成员函数。签名看起来像这样
template <typename MemFuncType, MemFuncType> class MemberWrapper;
我可以这样专门化它:
template <typename R, typename T, R T::* MemFunc> class MemberWrapper<R T::*, MemFunc>{};
我还想限制R T::* 的参数数量。我该怎么做?
我能想到的唯一解决方案是通过提供基于返回类型、函数类型、参数列表和 cv 限定符的部分特化来实现成员函数特征类。这将导致像当前的std::mem_fnoverloads 这样的繁琐实现。有没有更好的方法?
编辑:将Ret 更改为R。正如 cmets 中所指出的,它并不是真正的返回类型,并且特化无效。
【问题讨论】:
-
用例是什么?展示你打算如何使用它。为什么
std::function<>不适合? -
Ret T::*不是成员函数指针类型。 -
@0x499602D2 其实是这样。但是
Ret将——尽管它的名字——不是返回的类型,而是一个函数类型。类似void(int,int).
标签: c++ templates c++11 variadic-templates