gpt4 book ai didi

C++ - const 与非 const 成员函数 - 带有函数指针的模板

转载 作者:太空狗 更新时间:2023-10-29 20:54:04 25 4
gpt4 key购买 nike

我有一个代码,它使用模板。一个例子是这样的:

template <class MT>
struct class_method_info;

template <class T, class Res, class... Args>
struct class_method_info<Res(T::*)(Args...)>
{
typedef std::tuple<Args&&...> ArgsTuple;
typedef T ClassType;
typedef Res RetVal;
static constexpr std::size_t ArgsCount = sizeof...(Args);
static constexpr bool IsClassMethod = true;
};

这适用于非常量成员函数指针。

如果我将 Res(T::*)(Args...) 更改为 Res(T::*)(Args...) const,我可以传递 const 函数指针。然而,即使这是一个有效的解决方案,它也弄乱了我的代码,因为现在我的所有东西都翻了一番,而且有很多这样的东西。

还有其他办法吗?

最佳答案

您可以为 const this 添加一个特化,它会从另一个继承大部分实现:

template <class MT>
struct class_method_info;

template <class T, class Res, class... Args>
struct class_method_info<Res(T::*)(Args...)>
{
typedef std::tuple<Args&&...> ArgsTuple;
typedef T ClassType;
typedef Res RetVal;
static constexpr std::size_t ArgsCount = sizeof...(Args);
static constexpr bool IsClassMethod = true;
static constexpr bool IsConstThis = false;
};


template <class T, class Res, class... Args>
struct class_method_info<Res(T::*)(Args...) const> : class_method_info<Res(T::*)(Args...)>
{
static constexpr bool IsConstThis = true;
};

demo

关于C++ - const 与非 const 成员函数 - 带有函数指针的模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40436966/

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