C++ - 使用与包装数据相同的语法构造包装类

2024-03-20

我正在制作一个模板类,它是某种类型数据的包装器。我希望能够以与未包装时设置该数据相同的方式设置/构造此类。

基本思想如下:

template<typename T> class WrapperClass{

public:
    T data;

    WrapperClass(const T& _data) : data( _data) {}

    // others stuff

};

现在有了像整数这样的东西,我可以这样做:

WrapperClass<int> wrapped_data = 1;

但对于结构或类我不知道如何:

struct SomeStruct{

    int a, b, c;

    SomeStruct(int _a, int _b, int _c) {/*...*/}

};

//Would like to set the wrapped struct the same way as normal struct:
SomeStruct some_struct1 = { 1,2,3};
SomeStruct some_struct2( 1,2,3);

WrapperClass<SomeStruct> wrapped_struct1( {1,2,3}); //OK
WrapperClass<SomeStruct> wrapped_struct2 = {1,2,3}; //ERROR
WrapperClass<SomeStruct> wrapped_struct3( 1,2,3); //ERROR

有没有办法以某种方式转发参数,以便我可以在没有错误的情况下执行后一种语法?


你的包装器的问题是它需要一个已经构建的T。相反,您可以使用可变参数构造函数来接受构造T:

#include <utility>

template<typename T> class WrapperClass{
public:
    T data;    
    template <typename...Args>
    WrapperClass(Args&&...args) : data(std::forward<Args>(args)...) {}
};

struct SomeStruct{    
    int a, b, c;    
    SomeStruct(int _a, int _b, int _c) : a(_a),b(_b),c(_c) {}   
};

int main() {
    WrapperClass<SomeStruct> wrapped_struct2{1,2,3};  // ok
    WrapperClass<SomeStruct> wrapped_struct3 = {1,2,3};  // ok
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ - 使用与包装数据相同的语法构造包装类 的相关文章

  • 通过增加索引之和来生成排序组合的有效方法

    对于启发式算法 我需要一个接一个地评估特定集合的组合 直到达到停止标准 由于它们很多 目前我正在使用以下内存高效迭代器块生成它们 受到 python 的启发 itertools combinations http docs python o
  • 在 VS2017 下使用 Conan 和 CMake 项目进行依赖管理

    我正在尝试使用 CMake 与 VS2017 集成为 C 设置一个开发环境 以便在 Linux x64 下进行编译 为了更好地管理依赖关系 我选择使用 Conan 但我对这个软件还很陌生 我想知道让 VS2017 识别项目依赖关系的最佳方法
  • 内联函数/方法

    声明 内联函数必须在调用之前定义 这个说法正确吗 EDIT 该问题最初是德语 内联功能穆森 弗 伊赫雷姆 奥夫鲁夫定义 sein 也许它对任何人都有帮助 是的 它是正确的 但只是部分正确 它可能正确地重新构建如下 内联函数必须在每个翻译单位
  • Subversion 和 Visual Studio 项目的最佳实践

    我最近开始在 Visual Studio 中处理各种 C 项目 作为大型系统计划的一部分 该系统将用于替换我们当前的系统 该系统是由用 C 和 Perl 编写的各种程序和脚本拼凑而成的 我现在正在进行的项目已经达到了颠覆的临界点 我想知道什
  • System.IO.IOException:由于意外>数据包格式,握手失败?

    有谁知道这意味着什么 System Net WebException 底层连接已关闭 发送时发生意外错误 gt System IO IOException 由于意外 握手失败 数据包格式 在 System Net Security SslS
  • 为什么大多数平台上没有“aligned_realloc”?

    MSVC有自己的非标准函数 aligned malloc aligned realloc and aligned free C 17和C11引入了 std aligned alloc 其结果可以是de分配有free or realloc B
  • (const T v) 在 C 中从来都不是必需的,对吗?

    例如 void func const int i 在这里 const是不必要的 因为所有参数都是按值传递的 包括指针 真的吗 C 中的所有参数确实都是按值传递 这意味着无论您是否包含该参数 实际参数都不会改变const or not 然而
  • C# 正则表达式用于查找 中具有特定结尾的链接

    我需要一个正则表达式模式来查找字符串 带有 HTML 代码 中的链接 以获取文件结尾如 gif 或 png 的链接 示例字符串 a href site com folder picture png target blank picture
  • 将字符串中的“奇怪”字符转换为罗马字符

    我需要能够将用户输入仅转换为 a z 罗马字符 不区分大小写 所以 我感兴趣的角色只有26个 然而 用户可以输入他们想要的任何 形式 的字符 西班牙语 n 法语 e 和德语 u 都可以包含用户输入中的重音符号 这些重音符号会被程序删除 我已
  • 带 If 的嵌套 For 循环的时间复杂度

    void f int n for int i 1 i lt n i if i int sqrt n 0 for int k 0 k lt pow i 3 k do something 我的思考过程 执行if语句的次数 sum i 1 to
  • 从 Code::Blocks 运行程序时出现空白控制台窗口 [重复]

    这个问题在这里已经有答案了 当我尝试在 Code Blocks 中构建并运行新程序时 控制台窗口弹出空白 我必须单击退出按钮才能停止它 它对我尝试过的任何新项目 包括 Hello world 都执行此操作 奇怪的是 它对于我拥有的任何旧项目
  • tabcontrol selectedindex 更改事件未被触发 C#

    嘿伙计们 我有一个很小的问题 请参阅下面的代码 this is main load private void Form1 Load object sender EventArgs e tabAddRemoveOperator Selecte
  • 从 R 到 C 处理列表并访问它

    我想使用从 R 获得的 C 列表 我意识到这个问题与此非常相似 使用 call 在 R 和 C 之间传递数据帧 https stackoverflow com questions 6658168 passing a data frame f
  • 为什么要在 C++ 中使用 typedef?

    可以说我有 set
  • 使用 HTMLAgilityPack 从节点的子节点中选择所有

    我有以下代码用于获取 html 页面 将网址设置为绝对 然后将链接设置为 rel nofollow 并在新窗口 选项卡中打开 我的问题是关于将属性添加到 a s string url http www mysite com string s
  • C语言声明数组没有初始大小

    编写一个程序来操纵温度详细信息 如下所示 输入要计算的天数 主功能 输入摄氏度温度 输入功能 将温度从摄氏度转换为华氏度 独立功能 查找华氏度的平均温度 我怎样才能在没有数组初始大小的情况下制作这个程序 include
  • C++、三元运算符、std::cout

    如何使用 C 用三元运算符编写以下条件 int condition1 condition2 condition3 int double result int or double std cout lt lt condition1 resul
  • 以 UTF8 而不是 UTF16 输出 DataTable XML

    我有一个 DataTable 我正在使用 WriteXML 创建一个 XML 文件 尽管我在以 UTF 16 编码导出它时遇到问题 并且似乎没有明显的方法来更改它 我了解 NET 在字符串内部使用 UTF 16 这是正确的吗 然后 我通过
  • C#中为线程指定特殊的cpu

    我有 2 个线程 我想告诉其中一个在第一个 cpu 上运行 第二个在第二个 cpu 上运行 例如在具有两个 cpu 的机器中 我怎样才能做到这一点 这是我的代码 UCI UCIMain new UCI Thread UCIThread ne
  • 如何使用 C# 以低分辨率形式提供高分辨率图像

    尝试使用 300dpi tif 图像在网络上显示 目前 当用户上传图像时 我正在动态创建缩略图 如果创建的页面引用宽度为 500x500px 的高分辨率图像 我可以使用相同的功能即时转换为 gif jpg 吗 将创建的 jpg 的即将分辨率

随机推荐

  • 显示字段上内联 AJAX 调用的验证错误

    当 AJAX 调用返回验证失败时 我试图在字段 内联 上显示错误消息
  • 如何构造动态变量NAMES?

    我想循环数据 并创建动态地图 稍后可以将更多数据推入其中 例如 foreach item in bob john andy set item map end 这样以后我就可以这样做 bob map put foreach count som
  • 测试浏览器是否支持该样式

    我可以执行以下操作来检查浏览器是否不支持列计数 css3 属性 然后使用我自己的代码 if WebkitColumnCount in document body style MozColumnCount in document body s
  • 远程更新Jenkins“系统消息”字符串的方法?

    有没有办法远程插入 更新 Jenkins 系统消息 显示在屏幕顶部的实例描述 我们通过 API 部署 Jenkins 作业 并希望能够一目了然地知道部署了哪些版本的作业 没有用于修改系统消息的API 该值只能由配置窗口 https gith
  • NHibernate + ASP.NET + 在视图中打开会话 + L2Cache

    我正在使用 CodeProject 的众所周知的Open Session in View处理 NHibernate 会话 它能很好地与Level 2 Cache 有人成功做过吗 我应该使用NH Burrow反而 任何有关 ASP NET 最
  • 设置 hadoop 时 SSH 出现问题

    我是hadoop的新手 我在计算机上安装了Ubuntu 12 10 我想在一个节点上以伪分布式模式安装Hadoop 我搜索并获得了很多教程 但我在SSH方面遇到了问题 我做了什么教程说 我确信问题出在 SSH 上 我得到了 openssh
  • 如何随着方向的变化包含android计时器的值[重复]

    这个问题在这里已经有答案了 我正在构建一个简单的计时器应用程序 其中我使用 android 计时器来跟踪经过的时间 但是当我启动计时器并将方向更改为横向时 计时器会重置并再次显示 00 00 我希望它保持其价值 布局为portrait an
  • ImageView 中的动画scaleType =“centerCrop”

    有没有办法对scaleType centerCrop 进行动画处理 我需要将图像缩放到 certerCrop 以便图像可以覆盖 imageView 的整个区域 但我需要对其进行动画处理 以便在缩放图像之前向用户展示图像的实际外观 我打算这样
  • 实体框架 4 中的唯一键

    现有的数据库模式具有唯一的非主键以及一些依赖它们的外键 是否可以在 Entity Framework v4 中定义唯一键 不是主键 如何 实体框架6 1现在支持数据注释和 Fluent API 的唯一性 数据注释 参考 http msdn
  • 如何输出Django Admin生成的SQL

    如何输出 Django 管理员生成的 SQL 来查询 dangelist 页面的结果 我尝试覆盖queryset via def queryset self args kwargs qs super MyAdmin self queryse
  • 全局 css Reset * { margin: 0; 的缺点是什么?填充:0; }?

    全局 css Reset margin 0 的缺点是什么 填充 0 人们更喜欢 eric meyer 的 css 这是埃里克 梅耶尔 CSS html body div span applet object iframe h1 h2 h3
  • 错误:带有模板的“{”标记之前需要类名

    我正在尝试创建一个简单的基类和另一个继承它的类 我收到以下错误 guard room h 17 1 error expected class name before token 我看过其他帖子 似乎我在某个地方存在循环依赖 但我已尽我所读的
  • 将 vue 的槽嵌套在槽中

    更新 这是我在这里试图实现的简化版本 来自下面的线程对话 接受组件 A 接受组件 B 接受条件 if 条件为 true 用组件 A 包裹组件 B 并渲染 仅适用于其他情况 渲染组件 B I m有兴趣创建一个有条件地呈现包装器的组件 我估计理
  • 使用 php 创建一个 javascript 警报,其中包含 php 变量?

    我正在制作一个表单 当某些字段未填写或填写正确时 该表单应该创建一个 javascript 警报 我希望能够获取放入 php 变量中的错误消息并将其显示在 javascript 警报窗口中 以下代码不起作用 function died er
  • tkInter 列表框中的隐藏 ID

    我想知道是否可以以某种方式将隐藏的 id 与列表框中的每个条目一起存储 原因是我有一个表 其中包含来自数据库的唯一 ID 用户不可见 但用于唯一标识每个记录 我将表缓存在内存中并使用键入的字典身份证号码 我想创建一个列表框 它允许我选择其中
  • Dockerfile 命令“Volume”的用途是什么?

    当 Dockerfile 包含 VOLUME 指令时 例如 VOLUME opt apache2 www 希望这个路径在实际安装中存在 这意味着这个路径将被安装到某个东西上 对吗 此 VOLUME 指令适用于图像 而不是针对图像的一个实例
  • 在 Asp.net 中使用 Linq 创建 A - Z 索引的最佳实践 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我想创建一个 A Z 索引 通过 linq 从 SQL 数据库中提取信息 并且想知道创建非常接近顶部 A 的内容的最佳方法是什么 乙 Z
  • 单击 AlertDialog 的“肯定”按钮时获取“E/AndroidRuntime:错误报告崩溃 android.os.TransactionTooLargeException”

    我收到此错误 E AndroidRuntime Error reporting crash android os TransactionTooLargeException 还有这个 java lang StackOverflowError
  • MongoDB(和 Mongoose.js):查询条件的顺序重要吗?

    在创建一个简单的 MongoDB 查询时 我有一个关于条件排序在查询中 例如 Mongoose js 语法 conditions archived false first name Billy vs conditions first nam
  • C++ - 使用与包装数据相同的语法构造包装类

    我正在制作一个模板类 它是某种类型数据的包装器 我希望能够以与未包装时设置该数据相同的方式设置 构造此类 基本思想如下 template