小编Dan*_*aum的帖子

$ <(美元符号+左三角支架)在makefile中的含义是什么?

我试图理解一个简单的命令行字符串,它执行Javac并传递一些简单的参数.完整的命令行是:

javac -d $(OUTPATH) -sourcepath $(SOURCEPATH) $<
Run Code Online (Sandbox Code Playgroud)

除了最终的代币之外,这一行中的所有内容都是直截了当的,也是可以理解的:$<.

这些代币是什么意思?

附录:事实上,评论者是正确的.该行出现在makefile中.现在对我来说很明显,但是当我写这个问题时,make并没有将makefile传递给shell脚本.

请注意:$ <和$ @在Makefile中代表什么?还讨论了这个问题(当我查找以前关于此的问题时,我没有看到它).

makefile

6
推荐指数
1
解决办法
2478
查看次数

Eclipse项目的JavaEMFNature <nature>是什么?

我准备在NetBeans中构建一个预先存在的Java项目.我正在检查预先存在的与构建相关的文件,以确认我可以直接从源文件中安全地构建.

.project根目录中有一个文件.这是一个简短的文件,所以我在这里包括它:

<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
    <name>qrcode</name>
    <comment></comment>
    <projects>
    </projects>
    <buildSpec>
        <buildCommand>
            <name>org.eclipse.jdt.core.javabuilder</name>
            <arguments>
            </arguments>
        </buildCommand>
    </buildSpec>
    <natures>
        <nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
        <nature>org.eclipse.jdt.core.javanature</nature>
        <nature>org.eclipse.jem.beaninfo.BeanInfoNature</nature>
    </natures>
</projectDescription>
Run Code Online (Sandbox Code Playgroud)

对于这个问题,我想知道具体是什么JavaEMFNature <nature>.我无法在任何地方找到任何有关它的信息.

一个次要的,但相关的问题是:我是否正确无论是什么JavaEMFNature,它不打算执行(如.project文件中当前指定的那样)?

另一个次要问题:另外两个<natures>是什么,<buildCommand>(org.eclipse.jdt.core.javabuilder)的目的是什么?

我提出这些问题主要是为了确认我.project在NetBeans中重新创建项目时可以安全地忽略此文件,但我也要求学习(供将来参考).

java eclipse

6
推荐指数
1
解决办法
5180
查看次数

即使类与META-INF/services位于同一JAR文件中,服务加载程序也找不到服务提供者类

我正在成功运行一个C++应用程序,该应用程序使用JAR文件作为类路径参数加载JVM.然后,应用程序成功使用JNI调用来执行此JAR文件中.class文件中定义的各种函数.

.jar文件的目录结构中包含第三方.class文件集 - 从jai_imageio.jar合并的文件(这些.class文件及其完整目录结构,使用Intellij IDEA合并到此单个.jar文件中).合并的.jar文件中还包括来自原始jai_imageio.jar的行manifest.mf- 特别是implementation-title相关行.此外,该meta-inf/services文件夹存在,也从jai_imageio.jar复制.services目录中列出的各种服务看起来是正确的.

特别地,javax.imageio.spi.ImageOutputStreamSpi该内meta-inf/services在.jar文件夹中包含的单个线com.sun.media.imageioimpl.stream.ChannelImageOutputStreamSpi,并有在恰好由线indicatted的目录对应于该.jar文件内的类:com/sun/media/imageioimpl/stream/ChannelImageOutputStreamSpi.class.

但是,当Java代码执行以下行时:

ImageIO.write(image, "tiff", file); // Assume 'image' is a BufferedImage and 'file' is a File
Run Code Online (Sandbox Code Playgroud)

...它抛出异常:

java.util.ServiceConfigurationError: javax.imageio.spi.ImageOutputStreamSpi:
Provider com.sun.media.imageioimpl.stream.ChannelImageOutputStreamSpi not found
Run Code Online (Sandbox Code Playgroud)

......即使这个类同一个.jar文件中存在,如上所述.

有人可以解释为什么会发生这种错误,以及我应该怎么做才能解决它.

c++ java java-native-interface

6
推荐指数
1
解决办法
4093
查看次数

Will Boost.Serialization可以直接使用虚拟钻石继承吗?

我是第一次看Boost.Serialization,我找不到关于虚拟钻石继承结构序列化的明确评估(或说明).

考虑以下类层次结构:

class A { int a; }

class B1 : public virtual A { int b1; }

class B2 : public virtual A { int b2; }

class B3 : public virtual A { int b3; }

class C12 : public virtual B1, public virtual B2 { int c12; }

class C13 : public virtual B1, public virtual B3 { int c13; }

class C23 : public virtual B2, public virtual B3 { int c23; }

class D123 : …
Run Code Online (Sandbox Code Playgroud)

c++ serialization boost

6
推荐指数
1
解决办法
1359
查看次数

如何消除仅由返回类型不同的函数模板的歧义?

我注意到用于区分唯一模板函数的签名与用于区分唯一函数(包括那些从模板函数实例化的函数)的签名之间存在不对称性.

特别是,仅由返回类型不同的模板函数被认为是唯一的,而仅由返回类型不同的函数被认为是冗余的.

因此,我有一个相应的问题,关于如何在实例化之间消除仅由返回类型不同的函数模板之间的歧义:

#include <iostream>

template<typename T>
long foo(T)
{
    std::cout << "long" << std::endl;
    return 0;
}

template<typename T>
char foo(T)
{
    std::cout << "char" << std::endl;
    return '\0';
}

int main()
{
    double d = 0.0;
    long n = foo(d); // <- Ambiguous: How to specify the template function to use?
}
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,模板函数的实例化foo是模糊的,因为我刚才提到的不对称性.两个模板函数定义的存在是合法的,但实例化是非法的,即使返回类型在同一行代码中指定.

我纯粹是出于理论学习的目的而提出这个问题.也许这种代码构造在现实生活中会成为糟糕设计的标志.也许它永远不会出现在现实生活中.此外,我可以通过更改模板定义(或通过进行其他更改)来设想克服此问题的不同方法.

但是,我仍然想知道,如果保持模板定义不变,可以在实例化时消除这两个模板函数之间的歧义.

c++ templates

6
推荐指数
1
解决办法
1527
查看次数

************************************************************************

为什么将函数转换为除返回类型之外相同的函数类型失败相关?,我想以更全面的方式理解函数类型和函数签名之间的区别.

例如,该类型的函数的通常必须与函数指针处理时考虑,并且函数的类型包括该函数的返回类型.

但是,正如Mike Seymour对上述相关问题的回答所述,函数的签名与函数的类型不同.签名当然用于从潜在的重载函数中消除歧义(注意函数的返回类型在识别唯一函数中不起作用).但是,我现在想了解功能签名与功能类型的相关性和重要性.在我看来,C++中函数签名的唯一目的是在重载决策期间识别过载集中的重载候选和/或唯一函数.

我对么?重载解析是C++中函数签名的唯一目的吗?或除了(或仅间接相关)重载决议之外,还有其他功能签名用途/应用吗?

附录为清楚起见,请注意我特别想了解功能签名的目的与功能类型之间的区别.即,我知道函数类型的使用和编译器/链接器的调用约定的实现都需要函数类型.但是,调用约定仅在重载解析完成后才有意义.我在这里问,具体来说,函数签名的唯一目的(与类型相反)是否用于重载解析.

c++ overloading

6
推荐指数
1
解决办法
418
查看次数

为什么参数修饰符(即'const'或'volatile')不被视为函数类型或签名的一部分?

请注意,以下两个函数具有相同的类型和签名:

void foo1(int t) {} // foo1 has type 'void(*)(int)', and signature '(*)(int)'
void foo2(const int t) {} // Also type 'void(*)(int)', signature '(*)(int)'
Run Code Online (Sandbox Code Playgroud)

(const不属于函数类型或函数签名).类似地,返回类型上的修饰符(constvolatile)不会影响函数类型或函数签名.

但是,在函数定义本身(未显示)中,命名变量t确实保留了const限定条件foo2.

有许多StackOverflow问题讨论为什么函数的返回类型不被视为函数签名的一部分(用于重载解析).

但是,我找不到任何StackOverflow问题,询问为什么参数修饰符(constvolatile)不是函数类型或签名的一部分.另外,我直接查看了C++ 11标准文档,发现很难解开.

参数修饰符(即constvolatile)不是函数类型或签名的一部分这一事实背后的基本原理是什么?

附录为清楚起见,从下面R.MartinhoFernandes的答案,我要澄清,在C++(我认为)的参数调节剂constvolatile,如果他们只是忽略了作为函数类型/签名的一部分顶级改性剂-见下面这个问题的答案.

c++

6
推荐指数
1
解决办法
782
查看次数

[[attributes]]是C++ 11的新手?

使用C++ 11属性给出了[[attributes]]对C++ 11来说是新手的提示.

我想证实这一点:C++ 11的新属性是什么?

c++ c++11

6
推荐指数
1
解决办法
3543
查看次数

'docker history'命令:当列包含图层时,为什么列标签会显示'IMAGE'?

我已经和Docker一起工作了好几个月了,而且我还没有docker history经常使用这个命令.

然而,我曾经使用它的少数几次让我开始假设有大量的"依赖图像 "与我的"顶级"图像相关联,而不是.

现在我已经明白,上面的大部分假设是基于这样一个事实:很久以前,当我发出docker history命令时,最左边一列的标题是IMAGE,而事实上,这些行确实列出了与之相关的.单个图像,而不是图像.

以下是示例docker history命令的屏幕截图: 'IMAGE',而不是'LAYER'

Docker中的图像图层之间存在着重要的区别,这就是为什么这真的是一个严肃的问题.

我坦率地对此问题感到非常惊讶.如何通过Docker剥离出如此重要的东西?

我花了一段时间来寻找对这个问题的讨论或回答.令人惊讶的是,即使是Docker'历史'命令文档也没有提到这一点.我见过的唯一真正的'确认'来自这个链接.

有人可以告诉我为什么列的标题docker history是'IMAGE',而条目本身是图层?

docker

6
推荐指数
2
解决办法
2635
查看次数

您如何确定由“ std :: map”创建的,与“ boost :: pool_allocator”一起使用的节点的大小(以跨平台方式)?

更新

根据评论,答案和其他研究,我得出的结论是setmap在节点开销方面,a 和a 之间通常没有区别。我的以下问题确实是:

如何确定节点开销以方便 boost::pool_allocator用作自定义分配器?

而且,进一步的更新:节点的开销大概是永远不会超过4个三分球的大小,所以只是清除了Boost池为sizeof(T)sizeof(T)+sizeof(int)sizeof(T) + 2*sizeof(int)sizeof(T) + 3*sizeof(int)sizeof(T) + 4*sizeof(int)(或int64_t64位系统)应罚款。那就是我实际上在做的,并且有效。


我想通过避免调用这些对象的析构函数,而不是在每条包含多个实例的单个条带中释放内存,来使用增强内存池来管理数千万个大小相同的微小对象。

我发布关于此问题的另一个问题,这个问题的答案使我明白,我真正需要回答的问题就是我在这里问的那个问题。

考虑以下代码:

class Obj { // ... has an operator<() ... };

typedef std::set<Obj, std::less<Obj>, boost::fast_pool_allocator<Obj>> fast_set_obj;

// Deliberately do not use a managed pointer -
// I will *NOT* delete this object, but instead
// I will manage …
Run Code Online (Sandbox Code Playgroud)

c++ boost memory-management pool c++11

5
推荐指数
1
解决办法
922
查看次数