小编lod*_*odo的帖子

C++ static constexpr字段,类型不完整

我正在尝试编译此代码,但g ++抱怨ZERO有一个不完整的类型.这是否意味着在C++中结构不能包含static constexpr自身的实例?如果是这样,为什么?

struct Cursor
{
    size_t row,column;

    static constexpr Cursor ZERO {0,0};
    //error: constexpr const Cursor Cursor::ZERO has incomplete type
};
Run Code Online (Sandbox Code Playgroud)

编辑:我明白,Cursor当我申报时,不能有完整的类型ZERO.我想知道的是:我有什么方法可以ZERO归属Cursor并且仍在存在constexpr吗?

c++ c++11

27
推荐指数
4
解决办法
2621
查看次数

依赖类型:向量向量

我是依赖类型的新手(尽管他们有很大的不同,我正在尝试Idris和Coq).

我试图表达以下类型:给定类型T和k nats n1,n2,... nk的序列,由k个k序列组成的类型,其长度分别为n1,n2,... nk.

即,k个向量的向量,其长度由参数给出.这可能吗?

coq dependent-type idris

7
推荐指数
2
解决办法
310
查看次数

链接描述文件:.bss 部分的分配

我有一个像这样的链接器脚本:

OUTPUT_FORMAT(binary)
SECTIONS
{
    . = 0xFFFF800000000000 ;
    .startup_text : { processor.o(.text) }
    .text : { *(EXCLUDE_FILE (processor.o) .text) }
    .data : { *(.data) }
    .rodata : { *(.rodata) }
    linker_first_free_page = ALIGN(4096);
}
Run Code Online (Sandbox Code Playgroud)

一段代码加载此脚本生成的可执行文件,打印以下信息:

size of executable (pages)    3
first free page               0xffff800000003000
Run Code Online (Sandbox Code Playgroud)

可执行文件本身打印:

&(linker_first_free_page)     0xffff800000003000
Run Code Online (Sandbox Code Playgroud)

所以到目前为止一切正常。现在我的可执行文件需要一个.bss部分。请注意,我没有能够加载 elf 文件的加载器,所以我需要一个可以读取和使用的平面二进制文件,其中包含所有部分。

第一次尝试

OUTPUT_FORMAT(binary)
SECTIONS
{
    . = 0xFFFF800000000000 ;
    .startup_text : { processor.o(.text) }
    .text : { *(EXCLUDE_FILE (processor.o) .text) }
    .data : { *(.data) }
    .rodata : { …
Run Code Online (Sandbox Code Playgroud)

c++ ld linker-scripts

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

使用enable_if重载函数时出错

我有这段代码,其功能根据成员的不同而具有不同的实现:

#include <vector>

template <typename T>
struct D
{
    struct inner
        { T first; };
};

template <>
struct D<int>
{
    using inner = std::vector<int>;
};

template <typename T>
class C
{
    using B = D<T>;
    typename B::inner b;

    public:
        typename std::enable_if<std::is_same<decltype(std::declval<B::inner>().first),T>::value,T>::type
        first()
            { return b.first; }

        typename std::enable_if<std::is_same<decltype(std::declval<B::inner>()[0]),T>::value,T>::type
        first()
            { return b[0]; }
};
Run Code Online (Sandbox Code Playgroud)

此代码无法编译.gcc说<first signature> cannot be overloaded with <second signature>.我不明白为什么这不起作用.

非常感谢你.

c++ sfinae enable-if c++11

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

JavaFX TitledPane 无法覆盖 -fx-text-fill

我试图TitledPane在按下它们时更改我的标题颜色,但我无法做到。这是我的CSS:

.titled-pane * {
    -fx-background-color: transparent;
}
.titled-pane .title{
    -fx-background-color: #666666;
}
.titled-pane .title:hover {
    -fx-background-color: #AAAAAA;
}
.titled-pane .title:pressed {
    -fx-background-color: #DDDDDD;
    -fx-text-fill: black;  // does not work
}
Run Code Online (Sandbox Code Playgroud)

背景设置工作正常,所以我不明白有什么问题。

我见过这个问题,但我不知道如何将解决方案应用于我的案例。

提前致谢。

css java javafx accordion javafx-8

3
推荐指数
1
解决办法
1617
查看次数

在长模式下更改GDT并更新CS

我正在编写一个简单的自制64位OS,并通过UEFI进行引导。这意味着当我的代码开始执行时,它已经处于long模式,并且启用了分页。

现在,退出UEFI引导服务后,我想用我自己的UEFI构建所有控制结构。

成功更改CR3(分页结构)的内容后,我使用成功加载了新的GDT lgdt

问题在于,现在,要正确使用此新GDT,我需要将新值移至CS中。在网上,我找到了许多有关如何从32位切换到64位的方法的教程,但是从长模式到长模式几乎一无所获。

我想我应该跳个很远的距离,但是我没有用以下代码(AT&T语法)来做到这一点:

mov %rax, %cr3   # load paging structures (it works)
lgdt 6(%rcx)     # load gdt (it works)
mov $100, %rsp   # update stack pointer (it works)

# now what I tried unsuccessfully:
pushw $8         # new code segment selector
pushq fun        # function to execute next
retfq            # far return (pops address and code segment)
Run Code Online (Sandbox Code Playgroud)

没有适当的IDT,此代码使处的错误倍增retfq

编辑:我检查了我的分页结构,并且我很确定它们不是问题的原因。实际上,在没有最后三个指令的情况下,代码可以正常运行。问题是我需要一种更新CS的方法,在我的代码中仍然引用UEFI构建的旧段。是retfq正确的方法吗?还是我应该使用其他哪条指令?

提前致谢。

64-bit assembly x86-64 osdev gdt

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

Vulkan:序列化物理设备

假设我有更多物理设备支持Vulkan(专用+集成GPU,或2个专用或其他可能性).用户可以在选项屏幕中选择要使用的设备.我需要能够在磁盘上坚持自己的选择.

我可以使用哪个字段来唯一标识跨不同执行的物理设备?

  • vendorID+ deviceID是不够的:我可以连接2个相同的GPU
  • deviceName 由于同样的原因是不够的
  • deviceLUID不保证在场,可能会遇到与deviceUUID以下相同的问题
  • deviceUUID 看起来是正确的选择,但规范说:

    虽然VkPhysicalDeviceIDPropertiesKHR::deviceUUID指定在驱动程序版本和系统重新启动之间保持一致,但它不能用作设备的可序列化持久标识符.当系统断电时,在系统中物理添加,移除或移动到系统中的其他连接器时,它可能会更改.

那么......我该怎么用?

vulkan

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

Coq:关于集合内容的命题

我刚开始使用Coq.

我如何定义命题myProp,使得给定一个集合H,myProp Hiff是真的式

特别是,我如何表达作为命题的H一个子集的事实nat?或者我怎样才能简单地说让H成为nat的一个子集

coq

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