C++ 如何在不破坏现有客户机代码的情况下将类转换为模板类(c+;+;17之前的版本)?

C++ 如何在不破坏现有客户机代码的情况下将类转换为模板类(c+;+;17之前的版本)?,c++,c++11,templates,c++14,C++,C++11,Templates,C++14,我可以在不破坏用户代码的情况下将类转换为模板类吗?我试图更改一个类以接受模板参数,但同时,我希望避免破坏现有的客户机代码。更详细地说,现有的代码库是 class A{//some code}; 我将此转化为以下内容: 模板 类{//某些代码}; 为defaultType有效地编写了非模板化代码。在没有c++17(或更高版本)支持的情况下编译代码时,我能做些什么使现有代码不会中断吗?例如,以下内容应有效: A a{}; //existing code; works under c++17 wi

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

class A{//some code};
我将此转化为以下内容:

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

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;
A{}//现行守则;使用CTAD在c++17下工作。如何在c++14中使用?
一个b{}//新代码,如果用户决定使用不同的模板参数;

我很感激任何提示或建议

您可以做
std::string
所做的事情:

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

using A = basic_A<defaultType>;
模板
基本类{…};
使用A=基本A;

您的问题与CTAD有何关联?我看不出有什么论据可以推论(construcors没有在你的例子中引用参数…@Klaus:我也在想同样的问题,比如在Nicolai Josuttis的书中没有提到。但是,请看第二个答案。我也在gcc 10中尝试过它,它是有效的。如果你在任何地方都有该类型的参数、成员、指针或引用,CTAD都不会保存你。所以C++17在这里当然不重要。非常感谢,@Caleth!您还意外地帮助我理解了
basic\u string