gpt4 book ai didi

c++ - 专门针对 const 成员函数指针

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:20:19 30 4
gpt4 key购买 nike

我正在尝试将一些实用程序代码专门用于 const 成员函数,但在让简单的测试用例工作时遇到问题。
为了简化工作,我正在使用 Boost.FunctionTypes 及其 components<FunctionType> 模板 - 应该是 contain MPL 序列标签 const_qualified 对于 const 成员函数。

但是使用下面的测试代码,常量成员函数的特化失败了。有人知道如何让它发挥作用吗?

测试代码打印出来(使用 VC8 和 boost 1.40):

non-const
non-const

预期输出是:

non-const
const

测试代码本身:

#include <iostream>
#include <boost/function.hpp>
#include <boost/bind.hpp>
#include <boost/function_types/function_type.hpp>
#include <boost/mpl/contains.hpp>

namespace ft = boost::function_types;
namespace mpl = boost::mpl;

template<typename F>
struct select
{
template<bool IsConst /* =false */>
struct helper {
static void f() { std::cout << "non-const" << std::endl; }
};

template<>
struct helper</* IsConst= */ true> {
static void f() { std::cout << "const" << std::endl; }
};

typedef ft::components<F> components;
typedef typename mpl::contains<components, ft::const_qualified>::type const_qualified;
typedef helper<const_qualified::value> result;
};

typedef boost::function<void (void)> Functor;

template<typename MF>
Functor f(MF f)
{
return boost::bind(&select<MF>::result::f);
}

class C
{
public:
void f1() {}
void f2() const {}
};

int main()
{
f(&C::f1)(); // prints "non-const" as expected
f(&C::f2)(); // prints "non-const", expected "const"
}

最佳答案

虽然我仍然不清楚为什么采用 function_types::components<> 的方法行不通,我意识到有一种更简单的方法可以使用 Boost.FunctionTypes 来专注于 const 成员函数:
分类元功能类似于 is_member_function_pointer<> 可选地采用标签参数...

template<typename F>
struct select
{
/* ... helper-struct as before */

typedef ft::is_member_function_pointer<F, ft::const_qualified> const_qualified;
typedef helper<const_qualified::value> result;
};

关于c++ - 专门针对 const 成员函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1895342/

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