c++ - 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>
)使用的类型,所以也许有什么东西?也许我想要的不是类模板,而是派生类调用的函数模板(从而达到消除代码重复的目的)?
请赐教。
解决方案
不确定它是你想要的,但你可能有:
template<typename Sig>
class Wrapper
{
private:
Sig funcPtr;
};
因此,可能的用法,例如:
Wrapper<void (C::*) (int) const> w1;
Wrapper<void (C::*) (int)> w2;
推荐阅读
- spring-cloud-dataflow - 在 Spring Cloud 数据流中为应用程序属性加载元数据 jar 时出现问题
- python - 用正数代替时间序列数据的负数的策略
- ansible - 如何在ansible的子目录中组织角色
- java - 在 SOAP 请求和响应中间添加带有 GlassFish 的 Web 服务
- java - java中jobExecution.getStatus()什么时候返回BatchStatus.STOPPED值?
- php - 轻松数字下载 - 不要发送 1 个产品的收据电子邮件
- azure-data-factory - 我将如何在数据工厂源 sqlwh 目标 blob 中映射数据
- dictionary - 在 Julia 的字典中删除重复的向量
- django - Django 模型过滤/获取查询
- vue.js - axios 的不同响应取决于令牌