假设我有struct和std::tuple同类型的布局:
struct MyStruct { int i; bool b; double d; }
using MyTuple = std::tuple<int,bool,double>;
Run Code Online (Sandbox Code Playgroud)
是否有任何标准化的方式来相互投射?
PS我知道琐碎的内存复制可以解决这个问题,但它依赖于对齐和实现
我为一些选项声明了一个结构,该结构应该由命令行参数或通过读取输入文件来填充:
struct options {
int val1;
int val2;
bool val3;
}
Run Code Online (Sandbox Code Playgroud)
现在我想在执行程序时检查正确的参数数量.当然可以
const int optionsSize = 3;
Run Code Online (Sandbox Code Playgroud)
会做.但有任何自适应方式吗?如果我在结构中添加另一个值并且不记得增加整数怎么办?
是否可以使用结构化绑定语法确定在方括号中指定的变量名称数量,以匹配简单右侧的数据成员数量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
可以说我有
struct foo {
void ham() {}
void ham() const {}
};
struct bar {
void ham() {}
};
Run Code Online (Sandbox Code Playgroud)
假设我有一个模板化函数,我可以判断给定类型是否具有const重载ham?
如何检查特定类型是否typename T可以作图从参数typename ...Args的方式T{Args...}?我知道std::is_constructible< T, Args... >来自的类型特征<type_traits>,但它适用于括号,而不是花括号。我在编写类型特征方面没有太多经验,因此无法提供初始示例。作为简化,我们可以接受任何合理的断言,即使这不会导致一般性的太大损失。