相关疑难解决方法(0)

struct to/from std :: tuple conversion

假设我有structstd::tuple同类型的布局:

struct MyStruct { int i; bool b; double d; }
using MyTuple = std::tuple<int,bool,double>;
Run Code Online (Sandbox Code Playgroud)

是否有任何标准化的方式来相互投射?

PS我知道琐碎的内存复制可以解决这个问题,但它依赖于对齐和实现

c++ c++17

11
推荐指数
4
解决办法
4735
查看次数

如何获取结构中的元素数量?

我为一些选项声明了一个结构,该结构应该由命令行参数或通过读取输入文件来填充:

struct options {
  int val1;
  int val2;
  bool val3;
}
Run Code Online (Sandbox Code Playgroud)

现在我想在执行程序时检查正确的参数数量.当然可以

const int optionsSize = 3;
Run Code Online (Sandbox Code Playgroud)

会做.但有任何自适应方式吗?如果我在结构中添加另一个值并且不记得增加整数怎么办?

c++

6
推荐指数
3
解决办法
4647
查看次数

结构化绑定宽度

是否可以使用结构化绑定语法确定在方括号中指定的变量名称数量,以匹配简单右侧的数据成员数量struct

我想创建通用库的一部分,它使用结构化绑定将任意类分解为其组成部分.目前没有可变版本的结构化绑定(并且,我认为,不能用于当前提出的语法),但我首先想到的是对一些函数进行一组重载decompose(),它将struct参数分解为一组成分.decompose()应该通过参数的数量(即struct数据成员)来重载.目前constexpr if 语法也可以用来发送它.但是,我如何sizeof...为上述目的模拟类似于运算符的东西?我不能auto [a, b, c]在SFINAE结构中的某处使用语法,因为它是一个分解声明和AFAIK任何声明都不能在里面使用decltype,我也不能在lambda函数体中使用它,因为lambda函数也不能在模板参数中使用.

当然我想拥有内置运算符(语法类似于sizeof[] S/ sizeof[](S)for class S),但是类似下面的东西也是可以接受的:

template< typename type, typename = void >
struct sizeof_struct
{

};

template< typename type >
struct sizeof_struct< type, std::void_t< decltype([] { auto && [p1] = std::declval< type >(); void(p1); }) > >
    : std::integral_constant< std::size_t, 1 >
{

};

template< typename type >
struct sizeof_struct< …
Run Code Online (Sandbox Code Playgroud)

c++ type-traits variadic-templates c++17 structured-bindings

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

如何检查成员函数是否具有const重载?

可以说我有

struct foo {
    void ham() {}
    void ham() const {}
};

struct bar {
    void ham() {}
};
Run Code Online (Sandbox Code Playgroud)

假设我有一个模板化函数,我可以判断给定类型是否具有const重载ham

c++ templates c++11

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

是大括号可构造的类型特征

如何检查特定类型是否typename T可以作图从参数typename ...Args的方式T{Args...}?我知道std::is_constructible< T, Args... >来自的类型特征<type_traits>,但它适用于括号,而不是花括号。我在编写类型特征方面没有太多经验,因此无法提供初始示例。作为简化,我们可以接受任何合理的断言,即使这不会导致一般性的太大损失。

c++ boost type-traits boost-variant

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