首页 > 解决方案 > 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 转换为模板类,而无需编辑所有已经使用过的地方?

标签: c++c++11templatestypesafe

解决方案


如果您不想在其他地方进行更改,您可以给您的模板类起一个不同的名称(因为您甚至一开始都没有使用它):

template<typename T>
class WrapperT
{
public:
    WrapperT(T t) : _T(t) {}
    T get() { return _T; }
private:
    T _T;
};

using Wrapper = WrapperT<void*>;

如果您随后删除了Wrapper您可以重命名的所有用法WrapperT


推荐阅读