星期二, 11月 28, 2006

Visual C++如何決定候選candidate function list

Stan Lippman說明VC++中如何決定candidate function list:
  • Candidate Function List: 在某個呼叫點可視範圍內的所有function中,名稱相同的function所構成的集合
  • 以下例子中,對f(s)這個呼叫點來說,(1)(2)(3)(4)都是candidate function:
    void f(); // (1)
    void f( String^ ); // (2)
    void f( const string& ); // (3)
    void f( String^, array^ ); // (4)

    int main( array ^args )
    {
    if ( args == nullptr )
    handle_invalid_command_line();

    for each ( String^ s in args )
    f( s );
    }
  • 比較特殊的是以下例子,f雖然不在CLITypes namespace中,但因其argument cobj的type在CLITypes namespace中,使得CLITypes::takeC(C^)也列在Candidate Function中:
    namespace CLITypes
    {
    public ref class C {…};
    void takeC( C^ );
    }

    // …

    void f( CLITypes::C^ cobj )
    {
    // ok: calls CLITypes::takeC( C^ )
    takeC( cobj );
    }