C++ to Objective-C conversions
This page shows what is automatically translated and to what.
On the left is the C++ and to the right what the corresponding interface in Objective-C will be.
Not converted means there will be no automatic translation to a corresponding language object.
Note that any restriction this poses only applies to the public interface of your code (e.g. your public headers). Your internal code can use anything from C++.
Conversion tables
| C++ | Objective-C translation |
|---|---|
| Namespace | Prefix* |
| Nested namespace | Prefix* |
| Class | Class |
| Public function | Class function |
| Private function | Not converted |
| Virtual function | ??? |
| Operator | ??? |
| Static member function | Static class function |
| Static member variable | Static class variable |
| Public const member variable | Readonly property |
| Public non const member variable | Readwrite property |
| Private member variable | Not converted |
| Global variable | Static class property** |
| Global static variable | Static class property** |
| Free function | Static class function** |
| Overloaded function | Class function*** |
| Enum | NS_ENUM |
| Scoped enum | NS_ENUM |
| Templated class/function | Not converted**** |
| Specialized class template | Class*** |
| Specialized function template | Function*** |
| Documentation | Documentation |
* Prefix on all classes and free functions in the namespace.
** Wrapped in a class with a name that starts with the module name.
*** The naming convention for these classes and functions can be found under the Naming Convention page.
**** No direct translation to Objective-C. Will not emit warning.
| C++ operator | Objective-C operator |
|---|---|
| operator+ | ??? |
| operator- | ??? |
| operator* | ??? |
| operator/ | ??? |
| operator% | ??? |
| operator+= | ??? |
| operator-= | ??? |
| operator*= | ??? |
| operator/= | ??? |
| operator%= | ??? |
| operator== | ??? |
| operator!= | ??? |
| operator> | ??? |
| operator>= | ??? |
| operator< | ??? |
| operator<= | ??? |
| operator[] | ??? |
| operator() | ??? |
| operator= | Not converted |
| operator<< | Not converted |
| operator>> | Not converted |
| operator++ | Not converted |
| operator-- | Not converted |
| C++ Standard library class | Objective-C translation |
|---|---|
| std::array | NSArray |
| std::complex | ??? |
| std::deque | NSArray |
| std::filesystem::path | NSString |
| std::forward_list | Not converted |
| std::function | ??? |
| std::list | NSArray |
| std::map | NSDictionary |
| std::multimap | Not converted |
| std::multiset | Not converted |
| std::optional | Value or nil |
| std::pair | NSArray |
| std::priority_queue | Not converted |
| std::queue | Not converted |
| std::set | NSOrderedSet |
| std::shared_ptr | Value* |
| std::stack | Not converted |
| std::string | NSString |
| std::string_view | NSString |
| std::tuple | NSArray |
| std::unique_ptr | Value |
| std::unordered_map | NSDictionary |
| std::unordered_multimap | Not converted |
| std::unordered_multiset | Not converted |
| std::unordered_set | NSSet |
| std::valarray | NSArray |
| std::variant | ??? |
| std::vector | NSArray |
* After using a shared_ptr, the object is now always managed by a shared_ptr.
| C++ builtin type | Objective-C translation |
|---|---|
| bool | bool |
| char | char |
| char16_t | char16_t |
| char32_t | char32_t |
| double | double |
| float | float |
| int | int |
| int8_t | int8_t |
| int16_t | int16_t |
| int32_t | int32_t |
| int64_t | int64_t |
| long double | long double |
| long int | long int |
| long long int | long long int |
| short int | short int |
| signed char | signed char |
| uint8_t | uint8_t |
| uint16_t | uint16_t |
| uint32_t | uint32_t |
| uint64_t | uint64_t |
| unsigned char | unsigned char |
| unsigned int | unsigned int |
| unsigned long int | unsigned long int |
| unsigned long long int | unsigned long long int |
| unsigned short int | unsigned short int |
| wchar_t | wchar_t |
| void | void |