繁体   English   中英

const和非const函数作为模板参数参数

[英]Const and non-const function as template parameter argument

我一直在通过创建一个非常简单的事件/回调系统来加深对模板和函数指针的理解。 我到了要点,不管它的常量性如何,我都想以更多的方式执行给定的函数。“ template-y / generic ”方式。

当前有两个包装器,一个用于非const ,一个用于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>使用的类型(例如template<typename T, T T2> ),所以也许有些东西呢? 也许我想要的不是模板,而是派生类调用的功能模板(因此达到了消除代码重复的目的)?

请赐教。

不知道它是您想要的是什么,但是您可能有:

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

因此,可能的用法如下:

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

演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM