Библиотека OpenFOAM определяет два типа: volMesh
и surfaceMesh
, оба из которых наследуют от GeoMesh<fvMesh>
. Я хочу, чтобы определить функцию, которая принимает аргумент:Функция C++, которая принимает параметризованный тип, включая подтипы
void foo(GeometricField<vector, fvsPatchField, GeoMesh<fvMesh> >& field) { ... }
Однако г ++ выдает ошибку «неверный инициализации ссылочного типа» когда я пытаюсь вызвать функцию:
// surfaceVectorField is a typedef GeometricField<vector, fvsPatchField, surfaceMesh>
surfaceVectorField Uf(/* initialisation arguments */);
foo(Uf);
Исходя из Java фон, эта проблема кажется похожа на забывая использовать декларацию, такие как
void foo(GeometricField<vector, fvsPatchField, ? extends GeoMesh<fvMesh>> field) { ... }
Мне нужно, чтобы избежать C++ 11-специфические особенности, если это возможно.
Вы можете добавить немного больше кода, а именно пример того, как вы пытаетесь назвать свою функцию? – Ashalynd
- это ошибка от вызова функции на 'foo()' или определение переменной 'Uf'? http://stackoverflow.com/questions/9285627/is-it-possible-to-pass-derived-classes-by-reference-to-a-function-taking-base-cl –
Возможно, он не может преобразовать ваш параметр surfaceMesh в 'GeoMesh', или вся конструкция ссылается на правильный сложный тип. –
Ashalynd