小编Edd*_*chs的帖子

Go:将argv传递给C函数

从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元素具有不同的长度并且也非常不可靠

go argv cgo

4
推荐指数
1
解决办法
533
查看次数

std::is_same_v 带有非专业化模板

我有以下代码:

#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)

c++ templates type-traits

2
推荐指数
1
解决办法
698
查看次数

标签 统计

argv ×1

c++ ×1

cgo ×1

go ×1

templates ×1

type-traits ×1