Skip to content

Commit 7d2aac6

Browse files
committed
[nfc][docs][cxx-interop] Add example in the status document.
1 parent 7390f7d commit 7d2aac6

File tree

1 file changed

+45
-0
lines changed

1 file changed

+45
-0
lines changed

docs/CppInteroperability/CppInteroperabilityStatus.md

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,51 @@ This document provides an overview of the status of the Swift and C++ interopera
88
Swift has the experimental ability to import a large subset of C++.
99
This section of the document describes which C++ language and standard library features can be imported and used from Swift in an experimental manner.
1010

11+
### Example
12+
The following example demonstrates several interop features. It compiles and runs on main.
13+
14+
```C++
15+
// cxx-types.h (mapped to CxxTypes module in module.modulemap)
16+
#include <algorithm>
17+
#include <vector>
18+
19+
using V = std::vector<long>;
20+
```
21+
22+
```Swift
23+
// main.swift
24+
import CxxTypes
25+
import std.vector
26+
import std.algorithm
27+
28+
// We can extend C++ types in Swift.
29+
extension V : RandomAccessCollection {
30+
public var startIndex: Int { 0 }
31+
public var endIndex: Int { size() }
32+
}
33+
34+
// Create a vector with some data.
35+
var numbers = V(4)
36+
std.fill(numbers.beginMutating(), numbers.endMutating(), 41)
37+
38+
// Transform it using C++.
39+
std.transform(numbers.beginMutating(), numbers.endMutating(),
40+
numbers.beginMutating()) { (element: Int) in
41+
return element + 1
42+
}
43+
44+
// Loop over it in Swift.
45+
for (index, element) in numbers.enumerated() {
46+
print("v[\(index)] = \(element)")
47+
}
48+
49+
// We can also use anything in RandomAccessCollection, such as map and zip.
50+
let strings = numbers.map { "\($0)" }
51+
for (s, n) in zip(strings, numbers) {
52+
print("\(s) = \(n)")
53+
}
54+
```
55+
1156
### Importing C++
1257

1358
There are currently two experimental ways to import C++ into Swift:

0 commit comments

Comments
 (0)