根据模板参数更改member-typedef?

2024-05-01

我在这里遇到这个问题,我不知道如何解决。我想要一个模板类,它采用整数作为模板参数,并相应地为另一个类设置模板参数:

template <int T>
class Solver
{

  public:

    #if T <= 24
      typedef MyMatrix<float> Matrix;
    #else if T <= 53
      typedef MyMatrix<double> Matrix;
    #else
      typedef MyMatrix<mpreal> Matrix;
    #endif

    Matrix create();

};

然后这样称呼它:

Solver<53>::Matrix m = Solver<53>::create();

我怎样才能做这样的事情?目前,使用上面的代码,编译器抱怨它不知道“矩阵”,所以我不确定是否可以在模板参数上使用预处理器。


介绍

既然你愿意S<N>::Matrix根据不同的情况产生不同的类型N通过,你将需要使用某种元模板编程。该问题当前标记为预处理器,并且代码片段显式地尝试使用它;但这在这种情况下几乎没有用处。

当代码被预处理时N只是一个名称,它没有值;然而。


Solution

所提到的描述if, 如果别的, and else;我们正在处理类型.. 浏览<type_traits> http://en.cppreference.com/w/cpp/header/type_traits这好像是std::conditional http://en.cppreference.com/w/cpp/types/conditional将是完美的搭配!

std::conditional<condition, type-if-true, type-if-false>::type;

Note: Depending on whether the expression found in condition yields true, or false, ::type will be a typedef for either type-if-true, or type-if-false.


让我们编写一个示例实现:

#include <type_traits>
template <int N>
class Solver
{
  public:
    typedef typename std::conditional<
      /*    */ (N <= 24),
      /* y? */ MyMatrix<float>,
      /* n? */ typename std::conditional<(N <= 53), MyMatrix<double>, MyMatrix<mpreal>>::type
    >::type matrix_type;

  ...
};
int main () {
  Solver<53>::matrix_type a; // Matrix<double>
  Solver<10>::matrix_type b; // Matrix<float>
  Solver<99>::matrix_type c; // Matrix<mpreal>
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

根据模板参数更改member-typedef? 的相关文章

  • fork 和 exec 之间的区别

    两者有什么区别fork and exec 指某东西的用途fork and exec它体现了 UNIX 的精神 它提供了一种非常简单的方法来启动新进程 The fork调用基本上复制了当前进程 在almost任何方式 并非所有内容都会被复制
  • C++ 天花板函数的奇怪结果

    我一直在尝试天花板功能并得到一些奇怪的结果 如果我对十进制数乘以百执行 ceil 运算 我会得到一定的结果 但是 如果我直接对该乘法的结果执行 ceil 我会得到完全不同的输出 另一个问题是 这些不同的结果仅发生在某些数字上 任何帮助 将不
  • 如何在 C# 中启动文件

    编辑 我觉得自己像个白痴 我有一种感觉 像下面的答案会起作用 但没有看到任何与下面的答案类似的谷歌结果 所以当我看到这段复杂的代码时 我想它一定是这样的 我搜索并找到了这个Windows 列出并启动与扩展关联的应用程序 https stac
  • lambda 表达式到函数指针的转换

    这是这个问题的后续问题 Lambda 如何作为参数传递 https stackoverflow com questions 3321283 c0x lambda how can i pass as a parameter 据推测 MSDN
  • stl 集的 C# 等效项是什么?

    我想使用 C 将一些值存储在平衡二叉搜索树中 我查看了泛型命名空间中的集合 但没有找到与 stl 集合等效的集合 我可以使用什么通用集合 我不想存储键 值对 只是值 你可以使用HashSet http msdn microsoft com
  • Visual Studio 2013 Intellisense 不会将枚举类型放在方法参数的位置

    例如 我有以下代码 namespace VS2013 EnumTypes class Program enum SomeEnum One Two static void SomeMethod SomeEnum someEnum some c
  • 如何通过C#在SQLite数据库中写入变量DateTime值?

    我很新C and SQLite数据库并有一些变量存储在 SQLite 数据库中TimeStamp 这是我的代码 DateTime now DateTime Now m dbConnection new SQLiteConnection Da
  • File.ReadAllLines 或流读取器

    我们可以使用以下方式读取文件StreamReader http msdn microsoft com en us library vstudio system io streamreader或通过使用File ReadAllLines ht
  • 如何使用 DesignData 帮助开发 Metro 应用程序?

    我一直在 Windows Phone 应用程序中愉快地使用 DesignData 我希望使用它来帮助在 VS2012 Blend for VS 中的 Metro 风格应用程序中可视化设计 我已经尝试过希望显而易见的方法
  • 泛型类上的 DebuggerDisplay

    我在应用时遇到问题DebuggerDisplay泛型类的属性 DebuggerDisplay foo class Foo DebuggerDisplay Bar t class Bar
  • dlopen 或 dlclose 未调用信号处理程序

    我在随机时间内收到分段错误 我注册了信号 但发生分段错误时未调用信号处理程序 include
  • 如何在C中递归地找到另一个字符串中的字符串位置?

    我们有一个任务来创建带有两个字符串参数的递归函数 原型应该是这样的 int instring char word char sentence 如果我们愿意调用函数 instring Word Another Word 它应该具有以下返回值
  • 尝试缓冲区溢出

    我正在尝试使用缓冲区溢出来更改函数的结果 以使用以下代码更改堆栈上的结果 include
  • 如何修改 edmx 的默认代码生成策略?

    我想修改默认的代码生成策略 该怎么做 我只是想修改类名 lt code Escape container gt to Entities并将默认连接字符串更改为name Default 我不想为该项目创建模板文件 我想编辑它以便它可以在全球范
  • 向窗口句柄发送消息

    我尝试使用 sendmessage 将消息从我的 C 应用程序传递到 C 我的c 代码是这样的 int tmain int argc TCHAR argv COPYDATASTRUCT cpd cpd dwData 0 LPCWSTR st
  • 从 TFS 下载工作项附件(文件已损坏)

    我正在尝试创建 C 代码 因此我可以自动从 Team Foundation Server 下载 BUGS 预定义查询的所有附件 该代码似乎工作得很好 但所有下载的文件都因意外原因而损坏 我无法查看它们 有人可以看一下代码并分享意见吗 非常感
  • 我的 Opencv 应用程序处理速度非常慢

    我正在构建一个 OpenCV 应用程序 它从相机捕获视频 并在删除背景后将其覆盖在另一个视频上 我无法达到合理的速度 因为它以大约 1 fps 的速度播放输出 而我的背景去除以 3 fps 的速度工作 有没有办法以正常速度显示背景视频并以
  • 将纬度/经度转换为 X/Y,以便在美国地图图像上进行阿尔伯斯投影

    我正在尝试使用 C 或 Javascript 将纬度 经度转换为 X Y 坐标 以将带有 CSS 的 div 左 上 定位到美国地图的背景图像上 美国的标准地图投影是阿尔伯斯投影 如下所示 但 StackOverflow 仅提供参考基本墨卡
  • 定义一个断言,即使定义了 NDEBUG,该断言也有效

    我想定义一个assert与标准相同的宏assert 3 http man7 org linux man pages man3 assert 3 html调用 但它不会被预处理器删除NDEBUG被定义为 这样的呼唤 让我们称之为assert2
  • “while(true) { Thread.Sleep }”的原因是什么?

    我有时会遇到以下形式的代码 while true do something Thread Sleep 1000 我想知道这是否被认为是好的做法还是坏的做法以及是否有任何替代方案 通常我在服务的主函数中 找到 这样的代码 我最近在 Windo

随机推荐

  • 拒绝访问 .htaccess 中的 .ini 文件是否安全?

    我的 php Web 应用程序中有一个包含敏感信息的 ini 文件 我使用 htaccess 文件拒绝访问它
  • 将 NSTextAttachment 图像置于单行 UILabel 旁边

    我想附加一个NSTextAttachment图像到我的属性字符串并使其垂直居中 我使用以下代码来创建我的字符串 NSMutableAttributedString str NSMutableAttributedString alloc in
  • OAuth:从 Google App Engine 中启动 Google 计算实例

    我有一个 Google App Engine 网络应用程序 它运行着我网站的大部分内容 然而 对于某些功能 我需要一台linux机器 我希望我的 Google App Engine 应用程序能够在某些事件上自动启动 Google 计算实例
  • 如何在android系统状态栏中显示文本

    我正在尝试为 Android Nougat 开发一个应用程序 我想在从 android 服务例程生成的状态栏中显示一些信息 文本 所以我的问题是 我不知道如何在状态栏中显示文本 我添加了一个示例图像来显示我的确切含义 红色圆圈 我知道这是可
  • 路由器基本名称无法匹配 URL,因为它不是以基本名称开头

    升级到 React Router v6 后 我的应用程序停止工作 并且我未能找到在版本 6 中实现相同行为的方法 这是我升级到的版本 react router dom 6 2 1 这是与先前版本一起使用的代码5 2 0
  • JAVA FXCollections LoadException 类不是有效类型

    我正在尝试在此帮助下实现带有一些数据的 TableViewTutorial https docs oracle com javafx 2 fxml get started fxml tutorial intermediate htm CIA
  • 在 github 推送上将静态站点部署到 s3 的最佳策略? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想自动将我们的网站部署到 AWS S3 我已经编写了一个节点脚本来自动构建和上传网站 但我希望每当m
  • 有谁知道这是怎么做到的? SQL注入

    由于许多其他网站已被攻击 我不得不假设它是一个机器人 它注入了一个脚本 昨天 http google stats50 info ur php Today http google stats49 info ur php 它将它注入到多个表中
  • 阈值绝对值

    我有以下功能 char f1 int a unsigned b return abs a lt b 为了执行速度 我想重写如下 char f2 int a unsigned b return unsigned a b lt 2 b redu
  • 如何用C语言查找桌面路径?

    谁能告诉我如何使用 C 语言命令获取桌面路径 环境变量 场景是我想在桌面上保存一个文件 我所能做的就是给出一个固定的桌面路径和一个文件名来保存文件 但是在给出这个固定路径之后 我的代码将变得僵化 并且无法在具有不同桌面路径 环境变量 的任何
  • “ef migrations add”始终在新迁移中重新创建外键

    我安装了 RC1 和 VS 2015 update 1 每当我尝试添加新的迁移时 都会在 Up 方法中重新创建同一组外键 这意味着它们被删除然后直接添加 例如 当我添加迁移而不更改任何模型时 会生成该迁移 当然 Down 方法中也会生成类似
  • 没有确认提示的自定义 URL 方案 (Swift)

    我发现有两个选项可以从 Safari 网页打开我的应用程序 在我的应用程序项目中创建的自定义 URL 方案Info plist或苹果的通用链接 显然 自定义 URL 方案是最容易设置的方案 但我遇到的问题是 Safari 会显示一个确认窗口
  • 客户端使用高端口号

    为什么客户端会结束连接 使用高端口号 临时端口 而应用程序 监听通常较小的端口号 谢谢你的优点 卡蒂克 巴拉古鲁 服务器侦听固定端口号 以便客户端知道连接到哪里 客户端不需要使用固定端口号 因为没有人发起与它们的连接 事实上 如果同一台计算
  • 在 Android 中实现 Signal R

    我尝试过以下方式 import java util concurrent ExecutionException import microsoft aspnet signalr client LogLevel import microsoft
  • JavaScript:无需服务器即可将 HTML 表单和复选框数据保存到 .txt 文件吗?

    我有一个带有文本和复选框输入的 HTML 表单 我想在提交表单时将此表单数据下载到文本文件中 I 找到了从文本框下载数据的解决方案 https stackoverflow com questions 13685263 can i save
  • 在 Postgres 中使用 copy 命令时出错(错误:日期类型的输入语法无效:“”)

    我有一个 CSV 文件 我试图从中使用 PostgresCOPY命令以便从该 CSV 文件填充表 表列之一NEXT VISIT属于日期 data type CSV 文件中本应进入此日期列的某些相应字段具有空值 正在运行的复制命令如下所示 C
  • WebDriver - 元素不可点击 Chrome

    我有以下问题 我在 Firefox 和 Chrome 上运行测试 在 Firefox 上测试运行正确 但在 Chrome SauceLabs 上给出一条消息 unknown error Element is not clickable at
  • “std::size_t”在 C++ 中有意义吗?

    在我继承的一些代码中 我看到频繁使用size t与std命名空间限定符 例如 std size t n sizeof long 当然 它编译并运行得很好 但对我来说这似乎是不好的做法 也许是从 C 继承来的 难道不是吗size t内置于 C
  • 如何更新任意go结构的所有字符串字段?

    我尝试编写一个函数来更新所有字符串字段随意的结构体 像这样 type Student struct Name string Age int func SetStringField obj interface reflect ValueOf
  • 根据模板参数更改member-typedef?

    我在这里遇到这个问题 我不知道如何解决 我想要一个模板类 它采用整数作为模板参数 并相应地为另一个类设置模板参数 template