- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试将一些实用程序代码专门用于 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/
我有一个带有模板函数的基类,该函数具有通用模板类型和专用版本。 #ifndef BASE_CLASS #define BASE_CLASS #include using namespace std;
我有这个 3D vector 模板 template class Vec3TYPE{ public: union{ struct{ TYPE x,y,z; }; struct{ TY
我是一名优秀的程序员,十分优秀!