我有一个代码,很好用的是模板。一个例子是:
template <class MT>
struct class_method_info;
template <class T, class Res, class... Args>
struct class_method_info<Res(T::*)(Args...)>
{
typedef std::tuple<Args&&...> ArgsTuple;
typedef T ClassType;
typedef Res RetVal;
static constexpr std::size_t ArgsCount = sizeof...(Args);
static constexpr bool IsClassMethod = true;
};
这适用于非const成员函数指针。
如果我将Res(T::*)(Args...)
更改为Res(T::*)(Args...) const
,我可以传递const
个函数指针。然而,即使这是一个解决方案,它也搞砸了我的代码,因为现在我已经把所有东西都加倍了,并且有很多这样的东西。
还有其他办法吗?
答案 0 :(得分:4)
您可以为const
this
添加一个专门化,它将从另一个继承大部分实现:
template <class MT>
struct class_method_info;
template <class T, class Res, class... Args>
struct class_method_info<Res(T::*)(Args...)>
{
typedef std::tuple<Args&&...> ArgsTuple;
typedef T ClassType;
typedef Res RetVal;
static constexpr std::size_t ArgsCount = sizeof...(Args);
static constexpr bool IsClassMethod = true;
static constexpr bool IsConstThis = false;
};
template <class T, class Res, class... Args>
struct class_method_info<Res(T::*)(Args...) const> : class_method_info<Res(T::*)(Args...)>
{
static constexpr bool IsConstThis = true;
};