首页 > 解决方案 > const 和 non-const 函数作为模板参数参数

问题描述

我一直希望通过创建一个非常简单的事件/回调系统来加深对模板和函数指针的理解。我到了一个地步,我想执行一个给定的函数,而不管它是否以更...“模板-y/通用”的方式。

目前有两种包装器,一种用于非包装器,一种const用于const功能包装器,它们运行良好,但似乎是错误的,因为它们基本相同。

所以这是我目前拥有的一部分:

非常量函数包装器

template<typename CallerType, typename ReturnType, typename ...Args>
    class RegularMemberFunctionWrapper : public MemberFunctionWrapper<CallerType, ReturnType, Args...>
    {
    private:
        ReturnType(CallerType::* funcPtr)(Args...);
    }

常量函数包装

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>)使用的类型,所以也许有什么东西?也许我想要的不是模板,而是派生类调用的函数模板(从而达到消除代码重复的目的)?

请赐教。

标签: c++functiontemplates

解决方案


不确定它是你想要的,但你可能有:

template<typename Sig>
class Wrapper
{
private:
    Sig funcPtr;
};

因此,可能的用法,例如:

Wrapper<void (C::*) (int) const> w1;
Wrapper<void (C::*) (int)> w2;

演示


推荐阅读