通常,我必须从我的C ++代码中调用一些Fortran例程。就我而言,C标头始终可用,并且包含诸如
double fFortran(int* a, int* b, double* someArray, int* sizeOfThatArray)
Run Code Online (Sandbox Code Playgroud)
我的问题是:是否可以编写通用的C ++ 14包装器fortranCall(也许使用模板元编程),该包装器在必要时获取地址,然后像这样调用fortran函数
double someArray[2] = {1, 4};
double result = fortranCall(fFortran, 4, 5, someArray,
sizeof(someArray) / sizeof(someArray[0]));
Run Code Online (Sandbox Code Playgroud)
应该等于
double someArray[2] = {1, 4};
int sizeOfSomeArray = sizeof(someArray) / sizeof(someArray[0]);
int a = 4;
int b = 5;
double result = fFortran(&a, &b, someArray, &sizeOfSomeArray);
Run Code Online (Sandbox Code Playgroud)
我认为正确的解决方案涉及参数包,但我无法弄清楚如何迭代一个参数包并在需要时获取引用。