gpt4 book ai didi

c++ - 常量和非常量函数作为模板参数参数

转载 作者:行者123 更新时间:2023-11-28 04:11:55 29 4
gpt4 key购买 nike

我一直在寻求通过创建 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模板(从而达到消除代码重复的目的)?

请赐教。

最佳答案

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

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

因此,可能的用法如:

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

Demo

关于c++ - 常量和非常量函数作为模板参数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57544509/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com