小编zrb*_*zrb的帖子

不完整的类型和initializer_list

我正在尝试为序列化/反序列化C++对象建模一些元数据.这是抓住我需要的基本要素的东西; 它用GCC 5.2(g++ sample.cpp -std=c++14)和Clang 3.6(clang++ sample.cpp -std=c++14)编译.

我的问题是关于struct TypeInfo示例中的问题.它包含一个std::initializer_list自己.这个标准是否合规?

#include <cstdint>
#include <initializer_list>

enum class TypeCode : std::uint8_t { BOOLEAN, INT, OBJECT, STRING, SENTINEL };

struct TypeInfo
{
    TypeCode typeCode_;

    char fieldName_[64];

    union
    {
        std::uint16_t textMinLength_;
        std::uint16_t objectVersionMajor_;
    };

    union
    {
        std::uint16_t textMaxLength_;
        std::uint16_t objectVersionMinor_;
    };

    //  set only if typeCode_ = OBJECT
    std::initializer_list < TypeInfo > objectTypeInfos_;
};

int main()
{
    TypeInfo const sti { TypeCode::STRING, "updatedBy", { .textMinLength_ = …
Run Code Online (Sandbox Code Playgroud)

c++ c++14

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

使用折叠表达式为数组实现较少的运算符

我正在使用最新的clang ++在c ++ 17中使用fold表达式.我尝试使用这个为数组实现less运算符,我想用它来固定大小的字符串.

这是我到达的地方.有没有更好的方法来做到这一点,特别是避免在表达式中分配索引?

使用"clang ++ test_fold_expr_less.cpp -o test_fold_expr_less -std = c ++ 1z"进行编译,输出就在这里.

prompt$ ./test_fold_expr_less
=== less ===
0
1
0
0
1
0
0
0
0
1
1
1

#include <iostream>
#include <utility>

std::uint64_t arr1[8] = {1, 7, 2, 4, 8, 9, 3, 6};
std::uint64_t arr2[8] = {1, 7, 2, 4, 8, 9, 3, 6};
std::uint64_t arr3[8] = {1, 7, 2, 5, 8, 9, 3, 6};
std::uint64_t arr4[8] = {1, 7, 2, 3, 8, 9, 3, 6}; …
Run Code Online (Sandbox Code Playgroud)

c++ fold-expression c++17

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

继承自std :: true_type vs static constexpr const bool成员

我知道这不是一个非常尖锐的问题.使用一个优于另一个是否有优势(编译时,依赖性,调试符号大小,可用性,可读性等)?

template < typename T >
struct IsSharedPtr : std::false_type
{
};
Run Code Online (Sandbox Code Playgroud)

VS

template < typename T >
struct IsSharedPtr
{
    static constexpr bool value = false;
};
Run Code Online (Sandbox Code Playgroud)

一个相关的问题......

template < typename T, typename Enabler >
struct S;

template < typename T >
struct S < T, std::true_type >{};

template < typename T >
struct S < T, std::false_type >{};
Run Code Online (Sandbox Code Playgroud)

VS

template < typename T, bool enabler >
struct S;

template < typename T >
struct S < T, true …
Run Code Online (Sandbox Code Playgroud)

c++

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

假设 `std::ostream &lt;&lt; T()` 定义良好,如何为任何 T 打印 std::optional &lt; T &gt; ?

boost::optional我正在尝试使用 来迁移现有的(较大的)代码库std::optional。BOOST 有Optional_io.hpp。std::Optional 不存在这样的东西

这也必须与 boost 单元测试一起使用

c++

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

与Clang的__type_pack_element等效的GCC(在任何版本中),以获取模板参数包的第N个元素

https://reviews.llvm.org/D15421

clang具有__type_pack_element允许在可变参数模板中对参数包进行有效索引的功能。是否有等效的GCC?

我对使用不感兴趣tuple_element_t。我正在寻找一种替代方法,它是编译器原语

c++ gcc intrinsics variadic-templates

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

KDB +/Q:关于内部函数中未使用的参数

我有这个功能 f

f:{{z+x*y}[x]/[y]}
Run Code Online (Sandbox Code Playgroud)

我可以在f没有第三个参数的情况下调用,但是我得到了,但是如果{z+x*y}没有第三个参数,内部能够完成吗?

k kdb

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

一对不可复制不可移动类型和 emplace_back 的向量

这本质上是对我之前的问题的跟进std::unordered_map < K, boost::ptr_deque < T >'s operator[] (K const &) and emplace之间的区别

我正在尝试实现一个关联向量(称之为 unordered_flat_map)并希望支持 operator [key]

这是代码...

#include <utility>
#include <tuple>
#include <vector>

struct T
{
    T() = default;
    T(T const &) = delete;
    T & operator = (T const &) = delete;
    T(T &&) = delete;
    T & operator = (T &&) = delete;
};

using S = T;

int main()
{
    using value_type = std::pair < uint32_t, S >;
    std::vector < value_type > testuvm;
    value_type p(std::piecewise_construct, …
Run Code Online (Sandbox Code Playgroud)

c++11

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

标签 统计

c++ ×5

c++11 ×1

c++14 ×1

c++17 ×1

fold-expression ×1

gcc ×1

intrinsics ×1

k ×1

kdb ×1

variadic-templates ×1