c++ - c++11如何将遗留类转换为模板
问题描述
我有一个遗留类,如:
class Wrapper{
public:
Wrapper(void*);
void* get();
};
我想创建一个类型安全的包装器,例如:
template<class T>
class Wrapper{
public:
Wrapper(T);
T get();
};
由于 C++11,这样的东西不会起作用:
template<class T = void*> //Here I would need <>
class Wrapper...
typedef Wrapper<void*> Wrapper; //This isn't allowed
有没有一种方法可以将 Wrapper 转换为模板类,而无需编辑所有已经使用过的地方?
解决方案
如果您不想在其他地方进行更改,您可以给您的模板类起一个不同的名称(因为您甚至一开始都没有使用它):
template<typename T>
class WrapperT
{
public:
WrapperT(T t) : _T(t) {}
T get() { return _T; }
private:
T _T;
};
using Wrapper = WrapperT<void*>;
如果您随后删除了Wrapper
您可以重命名的所有用法WrapperT
推荐阅读
- python - 了解 Python 3.7 中类、namedtuple 和 __slots__ 的大小
- vba - Word 宏:在分节符后设置页面方向
- xcode - Mac OS X 应用程序的位置授权警报中显示不正确的应用程序名称
- c# - 由于与 .NETFramework 的兼容性问题,无法安装包 xxx
- javascript - 为什么我会收到这个意外的字符串错误?
- java - 使用 Java 套接字读取 IP 层标头
- c# - Web Socket 在信号器核心上不可用?
- ios - UIView 阴影故障
- jenkins - Jenkins git插件使用bitbucket获取状态码128
- html - Firefox 打印页面 - 白色字体颜色覆盖为较深的颜色