Обтекание вложенных шаблонных типов в nim

У меня есть тип C ++, как:

template <typename T>
class Vector {
struct Iterator {
};
};

И в C ++ я могу использовать Iterator как Vector<int>::Iterator,

Как мне обернуть это, чтобы использовать его от Нима? c2nim испускает

type Vector[T] {.importcpp...} = object
type Iterator[T] {.importcpp...}

который не компилируется, потому что nim не имеет вложенных типов, и будет производить Vector<T>::Iterator<T> скорее, чем Vector<T>::Iterator,

Я могу использовать не вложенные типы в Nim:

type VectorIterator[T] {.importcpp: "Vector::Iterator".}
var v : VectorIterator[cint]

И это естественно производит Vector::Iterator<int>что не так (должно быть Vector<int>::Iterator).

Есть ли способ изменить спецификацию импорта для получения правильного вывода?

5

Решение

Недавно я добавил поддержку оборачивания таких вложенных типов в компиляторе. Вам нужно будет использовать последний код из разви ветка. Вот как это можно сделать:

{.emit: """
template <class T>
struct Vector {
struct Iterator {};
};

""".}

type
Vector {.importcpp: "Vector".} [T] = object
VectorIterator {.importcpp: "Vector<'0>::Iterator".} [T] = object

var it: VectorIterator[int]

Соответствующие детали в руководстве можно найти Вот а также Вот.

4

Другие решения

Я думаю, что нет большого смысла в создании вложенных типов в Nim, потому что минимальной единицей инкапсуляции является модуль.
Так что вы должны просто создать отдельный FooBar[T] введите в тот же модуль.

0

По вопросам рекламы [email protected]