小编gal*_*p1n的帖子

使用constexpr函数替代reinterpret_cast

下面,您将找到一个用于CRC32计算的constexpr字符串文字.

我不得不重新解释字符串文字字符charunsigned char.因为reinterpret_cast在constexpr函数中不可用,所以解决方法是手动的两个补码的小实用函数,但我对它有点失望.

处理这种操作是否存在更优雅的解决方案?

#include <iostream>

class Crc32Gen {
    uint32_t m_[256] {};

    static constexpr unsigned char reinterpret_cast_schar_to_uchar( char v ) {
        return v>=0 ? v : ~(v-1);
    }
public:
    // algorithm from http://create.stephan-brumme.com/crc32/#sarwate
    constexpr Crc32Gen() {
        constexpr uint32_t polynomial = 0xEDB88320;
        for (unsigned int i = 0; i <= 0xFF; i++) { 
            uint32_t crc = i; 
            for (unsigned int j = 0; j < 8; j++) 
                crc = (crc >> 1) ^ (-int(crc & …
Run Code Online (Sandbox Code Playgroud)

c++ crc32 reinterpret-cast constexpr c++14

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

无法创建字符串文字类型

我想创建一个我可以用作模板参数的字符串文字.它将编译器抛入某种无限循环.有什么问题并修复?

template <char...> struct slit { };

template <typename ...A>
constexpr auto make_slit(char const* const s, A const ...args)
{
  return *s ? make_slit(s + 1, *s, args...) : slit<args...>();
}

int main()
{
  auto const tmp_(make_slit("slit"));

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

强制性错误(带clang++ -std=c++1y):

t.cpp:4:16: fatal error: recursive template instantiation exceeded maximum depth of 256
constexpr auto make_slit(char const* const s, A const ...args)
               ^
t.cpp:6:15: note: in instantiation of function template specialization 'make_slit<char, char, char, char, char, char, char, …
Run Code Online (Sandbox Code Playgroud)

c++ constexpr c++14

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

如何检测Windows 10上的开发者模式是否处于活动状态?

ID3D12Device::SetStablePowerState函数调用仅在系统中打开开发人员模式时可用.如果没有,它会触发设备删除.

是否有一个API来检测开发人员模式是否打开,到目前为止我没有在msdn上发现允许应用程序查询它的任何内容.

windows-10 directx-12

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

当标题行中可能没有最后一个列名时,使用 Serde 反序列化 CSV

我正在使用csvserdecrates 来反序列化 csv 文件。问题是最后一个字段实际上是一个逗号分隔的列表。

field1,field2,field3
xx, xx, str1, ..., strN
xx, xx,
xx, xx, str1, ..., strM
Run Code Online (Sandbox Code Playgroud)

这就是它在 Rust 中的映射方式,.flexible(true)在阅读器上阅读它:

#[derive(Debug, Deserialize)]
struct Row {
  field1: isize,
  field2: isize,
  field3: Vec<String>,
}
Run Code Online (Sandbox Code Playgroud)

如果 CSV 具有,field3标题行,则一切正常。但有些文件没有它,我找不到让 serde 仍然填充Vec. 我所能做的就是#[serde(default)]放空field3

这是一个 Rust游乐场,显示了问题:

field1,field2,field3
xx, xx, str1, ..., strN
xx, xx,
xx, xx, str1, ..., strM
Run Code Online (Sandbox Code Playgroud)

csv rust serde

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

'constexpr'非静态成员函数在C++ 1y中不会隐式'const'; 添加'const'以避免行为发生变化

clang ++给出以下警告(见下面的代码):

'constexpr'非静态成员函数在C++ 1y中不会隐式'const'; 添加'const'以避免行为发生变化

应该在哪里const添加?const constexpr size_t getSize() {再发一次警告:

返回类型的'const'类型限定符无效

码:

constexpr size_t getSize()
{
    return sizeof(header);
}
Run Code Online (Sandbox Code Playgroud)

const clang constexpr c++11 c++14

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

使用unique_ptr在函数调用中使用大括号初始化自动类型推导失败

鉴于下面的代码,unique_ptr和Bar之间的区别是什么,bar ( { new int } );但没有foo( { new int } );

#include <memory>

struct Bar {
    Bar() = default;
    Bar( int* m ) : m_( m ) {};
    ~Bar() { if ( m_ ) delete m_; }
    explicit operator bool() const { return m_; }
private:
    int* m_ {};
};

bool bar( Bar && a ) { return bool(a); }
bool foo( std::unique_ptr<int> && a) { return bool(a); }

int main() {
    bar( { } ); …
Run Code Online (Sandbox Code Playgroud)

c++ unique-ptr c++11 list-initialization

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