私は非常に単純な問題を抱えています:どこかに関数があります
int size (const C & c)
これは、少なくとも引数依存の名前検索によって見つかります。今問題:
struct B
{
int size () { /* ... */ }
void doSomething (const C & c)
{
int x = size (c); // <----------- problem!
// ...
}
}
メンバー関数が見つかった後に名前の検索が停止するため、これは機能しません。
メンバー関数が呼び出されようとするのではなく、メンバー関数が存在しない場合にコンパイラが行うことを行うように、指定された行に何を書く必要がありますか?
これは、引数に依存する名前の検索を防ぎ、宣言されている場所がわかっている場合にのみ機能するためです。::size
size
さらなる複雑さ:
T
以下のテンプレート化されたメンバー関数を使用する関連する型ごとB::doSomething
に、どこかに関数があることを知っています
int size (const T & t)
これは、少なくとも引数依存の名前検索によって見つかります。B
次のようになります。
struct B
{
int size () { /* ... */ }
template<class T>
void doSomething (const T & t)
{
int x = size (t); // <----------- problem!
// ...
}
}
非メンバー関数を呼び出したいです (存在することは確かですが、どこにあるかはわかりません)。