私は現在、取得しようとしていますコンパイルするには、次(定数)オーバーロードされたメソッド
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();
}
};
しかし、それが選択されますので、2つの可能性のあるto_foo()
メンバーの存在によって混乱専門の取得者デフォルトの場合。 to_foo()
メンバーのいずれかを削除するとすぐに機能しますが、callX()
メソッドの1つがconstと一致しないため失敗します。
この場合、この機能を検出する方法はありますか?
EDIT:ここ
がideone上の例である:http://ideone.com/E6saX
の方法のいずれかが除去されると、それだけで正常に動作します:http://ideone.com/iBKoN
それはあなたがここで達成しようとしているものを少しは不明だ: を参照してください。あなたが現在解決しようとしていることがわかるように、 'convert'の使い方を説明できる方が良いでしょう。 –
@MatthieuM:これは、より複雑なより大きなフレームワークの一部で、複数のタイプを扱います。いくつかのタイプでは、使用する前に変換が必要です。しかし、私はこれらの変換された型をどのように変換するかを検出する方法が必要です。これは入力型に大きく依存します。与えられたコードは、私が現在仕事に着手しようとしている、これの小さなデッドダウンされた部分です。 – LiKao