当前位置: 首页 > 知识库问答 >
问题:

如何在不破坏现有客户端代码的情况下将类转换为模板类(预c 17)?

满言
2023-03-14

我可以在不破坏用户代码的情况下将类转换为模板类吗?我试图更改一个类以接受模板参数,但同时,我希望避免破坏现有的客户机代码。更详细地说,现有的代码库是

class A{ // some code };

我将此转化为以下内容:

template <type T = defaultType>
class A{ // some code };

defaultType有效地编写了非模板化代码。当代码在没有C17(或更高版本)支持的情况下编译时,我能做些什么使现有代码不会中断吗?例如,以下内容应有效:

A a{}; //existing code; works under c++17 with CTAD. How to use in c++14?
A<typeFoo> b{} //new code, if users decide to use a different template argument;

我感谢任何提示或建议!

共有1个答案

姜胤
2023-03-14

你可以做什么std::字符串做:

template <typename T>
class basic_A{ ... };

using A = basic_A<defaultType>;
 类似资料:
  • 假设我有两个类叫做ad。 它们都实现了。 对于只有两种方法,分别称为和。 一切都很好。但是,虽然这似乎很好地利用了s,但我认为如果我需要向这个添加方法,实现就会中断,即我需要去实现这些类中的新方法,这打破了“封闭-开放原则”。 所以我想,除了,如果将来需要添加新方法,我还会使用类。 例如,。 这听起来是个好计划(如果不是,请纠正我)。 但问题是,如果这些类已经有其他类了怎么办?在这种情况下,我不能

  • 我有一些C代码,其中包含各种函数,每个函数都以不同类型的“handle”对象作为参数。所有这些句柄的实现都是相同的(它只是一个具有void指针和项计数的结构),因此只声明一个实现似乎是合乎逻辑的——但我还希望C编译器在用户将错误类型的句柄传递给函数时生成编译时错误。 我当前的方法使用类型定义创建各种句柄类型,它可以记录函数应该接受的句柄类型,但编译器会自动转换,因此不会将类型不匹配标记为错误。是否

  • 我最近通过从源代码编译在CentOS机器上安装了Python 2.7.3。Python 2.7.3安装在/opt/python2.7上,当我安装它时,我只需更改/usr/bin/Python以指向新版本。这显然是错误的,因为当我这样做的时候,它打破了百胜。我会得到以下内容。 我更改了/usr/bin/python以指向python 2.6.6,但现在2.6.6是python的默认版本。你知道怎么解

  • 当我这样做的时候,变量'amount'不是正确的答案,因为a现在是,用pylint的话说是'tuple',所以amount将从返回a+4,变为返回(a,a+5)+4 我如何将'a+5'添加到foo中,同时仍然允许amount是单个标量值,而不是元组?

  • 问题内容: 我正在使用使用react-native- firebase 的应用程序。我已经在travis上建立了CI构建,目的是拥有可复制的构建,并且突然停止了工作,如下所示: 之前:4天前,构建成功 after:今天,完全相同的构建被破坏,失败并显示以下消息: Android依赖项“ com.google.android.gms:play-services- base”对于编译(16.0.1)和

  • 问题内容: 我正在寻找一种更改列的数据类型的方法。当前,在我的数据库中,日期列类型定义为varchar,我需要将它们转换回日期类型。 知道怎么做吗? 问题答案: 您将需要根据您的确切表结构来调整它,但是类似的东西;