从Go 1.6开始这段代码:
argc := len(*argv)
c_argc := C.int(argc)
c_argv := make([]*C.char, argc)
for index, value := range *argv {
c_argv[index] = C.CString(value)
defer C.free(unsafe.Pointer(c_argv[index]))
}
err := C.MPI_Init(&c_argc, (***C.char)(unsafe.Pointer(&c_argv)))
Run Code Online (Sandbox Code Playgroud)
不再工作而失败了runtime error: cgo argument has Go pointer to Go pointer.我已经读过有关使用malloc()在C中分配数组然后复制所有内容但这很难做到(因为argv元素具有不同的长度并且也非常不可靠
我有以下代码:
#include <iostream>
#include <type_traits>
using namespace std;
template<typename T, int N>
class A {
public:
static constexpr int n = N;
};
template<typename T, typename X, int N>
class B {
public:
static constexpr int x = N;
};
template<typename T>
void test(T) {
if constexpr (std::is_same_v<T, A>) {
int a = T::n;
} else if constexpr (std::is_same_v<T, B>) {
int a = T::x;
}
cout << "a";
};
int main()
{
A<int, 2> a;
test(a);
return 0;
} …Run Code Online (Sandbox Code Playgroud)