目前我正在试图让下面的编译:如何正确地检查(常量)重载方法
class foo {
};
class bar {
public:
const foo & to_foo() const {
return f;
}
foo & to_foo() {
return f;
}
private:
foo f;
};
template< typename T, typename Enable = void >
class convert {};
template< typename T >
struct convert< T, typename std::enable_if< std::is_member_function_pointer< decltype(&T::to_foo) >::value >::type > {
static const foo & call1(const bar & b) {
return b.to_foo();
}
static foo & call2(bar & b) {
return b.to_foo();
}
};
但是专业化获取的两个可能的to_foo()
成员的存在混淆,所以它会选择默认情况下。只要我删除to_foo()
成员中的一个,它就会起作用,但是其中一个callX()
方法失败,因为它与常量不匹配。
在这种情况下,有什么方法可以检测到这个功能吗?
编辑:
这里是ideone一个例子:http://ideone.com/E6saX
当的方法之一被删除,它工作得很好:http://ideone.com/iBKoN
这是一个有点不清楚你正试图在这里实现什么。如果你能说明使用'convert'会更好,这样我们就可以看到你想要达到的目标,而不是迷失在当前尝试解决问题的细节中。 – 2012-03-06 09:45:45
@MatthieuM .:这是一个更加复杂的大型框架的一部分,它处理多种类型。对于某些类型的转换是必要的,然后才能使用。不过,我需要一种方法来检测如何转换和转换为这些转换类型,因为这高度依赖于输入类型。给定的代码是这个小部分,我目前正在努力工作。 – LiKao 2012-03-06 09:52:35