小编Yve*_*ves的帖子

(void *)1是什么意思?

我正在阅读ROS的代码。

在文件中ros_comm/roscpp/include/ros/subscriber.h,我看到了这样的一段代码:

operator void*() const { return (impl_ && impl_->isValid()) ? (void*)1 : (void*)0; }
Run Code Online (Sandbox Code Playgroud)

好吧,(void *)0可以看作是NULLC语言,但这(void *)1意味着什么呢?

如果一个类Foo包含此函数,则意味着我们可以这样编写代码:

Foo foo;
void *ptr = foo;
Run Code Online (Sandbox Code Playgroud)

对?那么这是否意味着void *ptr = (void *)1可能?这是什么意思?

c++ casting type-conversion typecasting-operator ros

45
推荐指数
1
解决办法
3891
查看次数

朱莉娅:OOP与否

我和Julia一起在朱诺工作.

我不知道朱莉娅是否支持OOP.

例如,是否有类似classstructC++的?

如何使用数据或函数等成员声明它?

oop struct class julia

41
推荐指数
4
解决办法
2万
查看次数

以下是未定义的行为吗?i = func(i)

我知道这i=i++;是一个未定义的行为,因为i在序列点之前更改了两次;.

但我不知道编译器是否保证这种情况,如下所示不是一个未定义的行为:

int func(int &i)
{
    i++;
    return i;
}

int i = 1;
i = func(i);
Run Code Online (Sandbox Code Playgroud)

c++ undefined-behavior

21
推荐指数
1
解决办法
1663
查看次数

cpp:usr/bin/ld:找不到-l <nameOfTheLibrary>

我创建了一个cpp项目,它使用了一个名为的lib文件:libblpapi3_64.so 这个文件来自一个我从Internet上下载的库.

我的项目运行没有任何错误.所以我将它更新为bitbucket.然后我的同事下载并在自己的计算机上运行它.但他得到一个错误:

usr/bin/ld: cannot find -lblpapi3_64.

实际上,我已将其复制到我的项目存储库中.我的意思是我在我的项目下创建了一个名为lib的文件,我使用的所有lib文件都在其中.

还有其他的lib文件liblog4cpp.a,但它们都很好.只有libblpapi3_64.so得到错误.

是因为它是.so文件不是.a文件吗?还是有其他原因?
顺便说一句,libblpapi3_64.sois 的文件名green和其他文件(.a)是white.我认为这不是一个链接文件,它是原始文件.

c++

15
推荐指数
1
解决办法
8万
查看次数

julia:创建并使用没有Internet的本地包

我正在尝试创建一个julia语言包并在项目中使用它.
现在我只有一个jl文件,我不知道如何用它创建一个包.

我已阅读此链接,但我仍然不知道该怎么做.我想创建一个带有jl文件的本地包,并使用以下代码在我自己的本地项目中使用它:using MyPackage.

有人能帮助我吗?

package julia

14
推荐指数
1
解决办法
4602
查看次数

Julia:通过给定的字符串调用函数

朱莉娅是否像java一样支持反射?

我需要的是这样的:

str = ARGS[1] # str is a string
# invoke the function str()
Run Code Online (Sandbox Code Playgroud)

reflection julia

12
推荐指数
1
解决办法
1195
查看次数

我们什么时候应该使用std :: enable_shared_from_this

我只知道std::enable_shared_from_this形成这个链接.
但在阅读下面的代码后,我不知道何时使用它.

try {
        Good not_so_good;
        std::shared_ptr<Good> gp1 = not_so_good.getptr();
    } catch(std::bad_weak_ptr& e) {
        // undefined behavior (until C++17) and std::bad_weak_ptr thrown (since C++17)
        std::cout << e.what() << '\n';    
    }
Run Code Online (Sandbox Code Playgroud)

上面的代码"不太好",因为shared_ptr在调用之前没有存在getptr().好的应该是:

std::shared_ptr<Good> gp1 = std::make_shared<Good>(); // having a shared_ptr at the beginning
std::shared_ptr<Good> gp2 = gp1->getptr();
Run Code Online (Sandbox Code Playgroud)

但是,如果我已经有了一个shared_ptr对象,为什么我不只是简单地编码:std::shared_ptr<Good> gp2 = gp1;这意味着我根本不需要std::enable_shared_from_this.

在我看来,使用std::enable_shared_from_this是确保多个shared_ptr对象具有相同的控制块,以便我们可以避免双删除问题.但是如果我必须提醒自己shared_ptr在开始时创建一个,为什么我不提醒自己使用shared_ptrobject来创建一个新的,而不是使用原始指针?

c++ smart-pointers shared-ptr c++11

11
推荐指数
1
解决办法
3433
查看次数

C相当于C++的decltype

在我的C项目中,有一个由另一位同事创建的结构,包含一些函数指针:

struct tools {  
    int (*tool_a) (int, int, int);
    ...
};
Run Code Online (Sandbox Code Playgroud)

我无权更改此结构和相关文件.

现在我用结构编码.
我必须定义一个函数,其返回类型和参数列表必须与tools.tool_a.
这意味着我的功能必须如下:

int my_func(int, int, int);
Run Code Online (Sandbox Code Playgroud)

问题是结构变化很大,特别是返回类型,例如今天int被替换size_t,所以我必须经常更改我的代码.

我知道decltype在C++中可以帮助我所以我只想知道C是否有相同的东西?

我想我可能会使用宏但我不知道如何,我甚至不知道它是否可能.

真实案例

我正在用C开发一些用于Linux内核的测试工具
.我公司的其他组有很多版本的自定义内核.由于历史原因,其中一些使用int,其他使用size_tssize_t等等.

现在当我编码时,我必须这样做:

// int my_func(int a, int b, int c)
size_t my_func(int a, int b, int c)
// ssize_t my_func(int a, int b, int c)
{}
struct tools my_tool = {
    .tool_a = my_func;
}
Run Code Online (Sandbox Code Playgroud)

我必须继续评论和取消评论......

c c++ macros decltype

11
推荐指数
2
解决办法
1357
查看次数

为什么TreeSet <E>的构造函数接受E的参数super而不是E的扩展

我正在阅读java源代码,我发现如下:http:
//www.java2s.com/Code/JavaAPI/java.util/newTreeSetEComparatorsuperEc.htm

我不明白为什么这个构造函数的参数是<? super E>.

正如我的理解,应该是<? extend E>代替<? super E>,因为如果E是可比的,E的儿童必须在可比,而E的父母可能不.

java comparator

9
推荐指数
2
解决办法
544
查看次数

如何使用 Golang 安装 Gin

我是 Golang 的新手,我正在尝试使用Gin在 Ubuntu 16.04 上开发 Web 服务器。

执行后go get -u github.com/gin-gonic/gin,会出现很多文件夹~/go/pkg/mod/github.com/

然后我试着举个例子:

package main

import "github.com/gin-gonic/gin"

func main() {
    r := gin.Default()
    r.GET("/ping", func(c *gin.Context) {
        c.JSON(200, gin.H{
            "message": "pong",
        })
    })
    r.Run() // listen and serve on 0.0.0.0:8080 (for windows "localhost:8080")
}
Run Code Online (Sandbox Code Playgroud)

但是,go run example.go犯了错误:

example.go:3:8: cannot find package "github.com/gin-gonic/gin" in any of:
        /usr/local/go/src/github.com/gin-gonic/gin (from $GOROOT)
        /home/zyh/go/src/github.com/gin-gonic/gin (from $GOPATH)
Run Code Online (Sandbox Code Playgroud)

在我的系统中,$GOROOTis/usr/local/go/$GOPATHis ~/go/

我怎么能解决这个问题?

linux webserver module go go-gin

8
推荐指数
1
解决办法
5333
查看次数