我一直在通过创建very simple event/callback system来加深对模板和函数指针的理解。我到了要点,不管它的常量性如何,我都想以更多...“ template-y / generic ”的方式执行给定的函数。
目前有两个包装器,一个用于非const
函数,另一个用于const
函数,虽然效果很好,但由于它们基本相同而显得有些错误。
这是我目前所拥有的部分:
非常量函数包装器
template<typename CallerType, typename ReturnType, typename ...Args>
class RegularMemberFunctionWrapper : public MemberFunctionWrapper<CallerType, ReturnType, Args...>
{
private:
ReturnType(CallerType::* funcPtr)(Args...);
}
const函数包装器
template<typename CallerType, typename ReturnType, typename ...Args>
class ConstMemberFunctionWrapper : public MemberFunctionWrapper<CallerType, ReturnType, Args...>
{
private:
ReturnType(CallerType::*funcPtr) (Args...) const;
}
理想情况下,我只希望有一个父级“ MemberFunctionWrapper”,通过模板参数定义该函数是否为const
。
template<typename CallerType, typename FunctionSignature, typename ...Args>
MemberFunctionWrapper
{
private:
FunctionSignature *funcPtr;
}
使用模板是否还可以实现类似的功能?
我在线上看到了一些示例,其中一个模板参数将定义另一个模板参数使用的类型(例如template<typename T, T T2>
),所以也许有什么用?也许我想要的不是 class 模板,而是派生类调用的 function 模板(因此达到了消除代码重复的目的)?
请赐教。
答案 0 :(得分:1)
不确定它想要什么,但是您可能会:
template<typename Sig>
class Wrapper
{
private:
Sig funcPtr;
};
以及诸如此类的可能用法:
Wrapper<void (C::*) (int) const> w1;
Wrapper<void (C::*) (int)> w2;