How to: Overload Functions with Interior Pointers and Native Pointers (C++/CLI)

 

The latest version of this topic can be found at How to: Overload Functions with Interior Pointers and Native Pointers (C++/CLI).

Functions can be overloaded depending on whether the parameter type is an interior pointer or a native pointer.

System_CAPS_ICON_important.jpg Important

This language feature is supported by the /clr compiler option, but not by the /ZW compiler option.

Code

// interior_ptr_overload.cpp  
// compile with: /clr  
using namespace System;  
  
// C++ class  
struct S {  
   int i;  
};  
  
// managed class  
ref struct G {  
   int i;  
};  
  
// can update unmanaged storage  
void f( int* pi ) {  
   *pi = 10;  
   Console::WriteLine("in f( int* pi )");  
}  
  
// can update managed storage  
void f( interior_ptr<int> pi ) {  
   *pi = 10;   
   Console::WriteLine("in f( interior_ptr<int> pi )");  
}  
  
int main() {  
   S *pS = new S;   // C++ heap  
   G ^pG = gcnew G;   // common language runtime heap  
   f( &pS->i );  
   f( &pG->i );  
};  

Output

in f( int* pi )  
in f( interior_ptr<int> pi )  

interior_ptr (C++/CLI)

Show: