小编Vio*_*ffe的帖子

有没有办法指定或断言子类必须重新实现特定的非抽象虚方法?

这就是我的意思.我有一个类层次结构:

class A {
   virtual int f() = 0;
};

class B : public A {
   int f() override {return 5;}
   void doSpecificStuff() {}
}
Run Code Online (Sandbox Code Playgroud)

B是一个自给自足的类,可以单独使用.但它也有许多后代:

class C : public B {
   int f() override {return 171;}
}
Run Code Online (Sandbox Code Playgroud)

有什么方法可以确保f在子类化时我不会忘记重新实现B

c++ inheritance

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

"输入行太长"错误在一个非常基本的脚本中没有明显的原因

以下脚本

cmd /C ""set PATH=nasm\;%PATH%" & "echo %PATH%""
Run Code Online (Sandbox Code Playgroud)

只打印这个:

The input line is too long.
The input line is too long.
Run Code Online (Sandbox Code Playgroud)

为什么?我怎样才能解决这个问题?

PS这适用:

cmd /C "echo %PATH%"
Run Code Online (Sandbox Code Playgroud)

而这不是:

cmd /C ""echo %PATH%""
Run Code Online (Sandbox Code Playgroud)

windows command-line batch-file

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

对于模板类Foo方法的参数,"Foo&"和"Foo <T>&"是一样的吗?

考虑上课

template <typename T>
struct Foo {
   Foo(const Foo<T>& other) {}
};
Run Code Online (Sandbox Code Playgroud)

对于构造函数参数类型,是const Foo<T>&const Foo&在这种情况下一样吗?我总是假设没有,认为后者可以被召唤Foo<int> f = Foo<float>(),而前者则不能.但现在我不确定是不是这样.

c++ templates

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

如何设置全局应用程序背景颜色?

我知道我可以为layout.xml文件中的各个视图指定背景颜色.例如,根布局的bg颜色Activity实际上是此活动的背景颜色.但有没有办法将此颜色全局设置为整个应用程序,以便所有活动和片段自动获取?我正在使用这个Theme.AppCompat主题.

或者我不应该改变默认的灰色颜色?

android android-theme

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

将#elif与#ifdef一起使用是否合法?

一个简单的问题,谷歌没有帮助我.在C++中使用#elif上下文中的子句是否合法#ifdef?它似乎与c ++ 11模式(MSVC 2015/2017,clang,GCC)中的所有主要编译器一样编译和工作,但我不确定它是否符合标准.

c++ preprocessor c-preprocessor preprocessor-directive

4
推荐指数
3
解决办法
2713
查看次数

递归计算变量模板值

这就是我在努力工作(并且失败).这个想法count<N>必须等于N.这是一个更复杂的计算的简化情况,不介意这个代码的明显愚蠢.

template <>
constexpr size_t count<0> = 0;

template <auto N>
constexpr size_t count = 1 + count<static_cast<size_t>(N) - 1>;

int main()
{
    return count<1>;
}
Run Code Online (Sandbox Code Playgroud)

它不编译:

<source>:5:23: error: expected initializer before '<' token

 constexpr size_t count<0> = 0;
                       ^
Run Code Online (Sandbox Code Playgroud)

如果我将一般情况与特殊化交换,它也不会编译.它甚至可以用变量模板吗?

在线尝试

c++ templates c++14 c++17

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

我可以用“using”声明类型 [[nodiscard]] 吗?

您可以使用该属性声明一个类[[nodiscard]]。当您从此类的语义中知道每当它从函数返回时,它必须用于某些用途时,它可能会很有用。[[nodiscard]]我正是遇到这种情况,用它来标记类而不是返回它的每个单独的函数会非常方便。然而,有一个复杂的问题。这是我需要制作的类型[[nodiscard]]

using ConnectionStruct = std::pair<std::shared_ptr<CMutex>, std::shared_ptr<SignalFunction>>;
Run Code Online (Sandbox Code Playgroud)

是否有语法将 my 标记ConnectionStruct[[nodiscard]]

c++ c++17 nodiscard

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

Mercurial子目录可以驻留在子文件夹中吗?

我多年来一直使用以下行.hgsub

setup/help = https://my.repo.com/manuals
Run Code Online (Sandbox Code Playgroud)

它将名为“ manuals”的存储库help放入另一个文件夹内的一个文件夹中setup。所以我的父存储库结构如下所示:

.hg
setup
|__help
|  |__.hg
|
.hgsub
Run Code Online (Sandbox Code Playgroud)

在我今天更新到Mercurial 4.9之前,这没有问题,它现在说:“子仓库路径包含非法组件:安装程序/帮助”,我什至无法提交主仓库。水星现在禁止这样做吗?有有效的.hgsub语法可以使这项工作吗?我不想help成为主项目文件夹的直接子代。我以前的Mercurial版本是4.5,这不像我在使用古老的工具...

根据请求进行错误回溯:

Traceback (most recent call last):
  File "mercurial\scmutil.pyo", line 165, in callcatch
  File "mercurial\dispatch.pyo", line 367, in _runcatchfunc
  File "mercurial\dispatch.pyo", line 1021, in _dispatch
  File "mercurial\dispatch.pyo", line 756, in runcommand
  File "mercurial\dispatch.pyo", line 1030, in _runcommand
  File "mercurial\dispatch.pyo", line 1018, in <lambda>
  File "mercurial\util.pyo", line 1670, in check
  File "mercurial\commands.pyo", line 4621, in push
  File …
Run Code Online (Sandbox Code Playgroud)

mercurial subrepos mercurial-subrepos

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

启用基于该参数默认值的模板参数类型自动推断

这是我想做的:

#include <vector>

template <class ContainerType, typename ComparatorType>
void f(
    ContainerType c1,
    ComparatorType comp = 
    [](const typename ContainerType::value_type& l, const typename ContainerType::value_type& r) {return l < r;})
{
}

int main()
{
    std::vector<int> a{1, 2};
    f(a);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但这不起作用:could not deduce template argument for 'ComparatorType'

使用代理函数代替实际的默认参数值是可行的,但似乎过于冗长,有没有更好的方法?更不用说它是不一样的,因为现在我不能在不更改客户端代码中的函数名称的情况下用我自己的默认比较器代替。

#include <vector>

template <class ContainerType, typename ComparatorType>
void f(
    ContainerType c1,
    ComparatorType comp)
{
}

template <class ContainerType>
void f2(ContainerType c)
{
    f(c, [](const typename ContainerType::value_type& l, const typename ContainerType::value_type& r) …
Run Code Online (Sandbox Code Playgroud)

c++ templates template-argument-deduction c++17

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

这个编译器优化是如何工作的?

我正在研究woothashwyhash哈希函数,这是根据 SMHasher 项目的最佳哈希函数之一的重申。

GCC 和 clang 都能够在-O1(或者更高级别,当然)执行非常深入的优化,我完全不明白它们是如何从 900 多行 asm with -Og(紧密遵循源代码)变成只有 25 行asm 指令(带有 GCC 主干的 23,大概是 GCC 13!)。

代码有点太长,无法完整粘贴到此处,因此这里是编译器资源管理器的链接: https: //godbolt.org/z/qK16EW4zT

问题的要点如下:哈希函数的主循环以 32 字节宽的批次处理数据,后面是一个具有 31 个标签的开关来处理数据的剩余尾部。_wootp1 ... _wootp5是编译时常量。

inline constexpr uint64_t ROTL64(uint64_t x,int r) { return (x << r) | (x >> (64 - r)); }

inline uint64_t _wootmum(const uint64_t A, const uint64_t B) {
    uint64_t r = (A ^ ROTL64(B, 39)) * (B ^ ROTL64(A, 39));
    return r - …
Run Code Online (Sandbox Code Playgroud)

assembly gcc inlining compiler-optimization

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