使用typedefs自动填充模板参数

Using typedefs to autofill a template argument

本文关键字:参数 填充 typedefs 使用      更新时间:2023-10-16

我有以下类:template<typename Trait, Value> class Storage。在我使用此类的一个应用程序中,我想为Storage创建一个同义词,在Value中"自动填充"为ValueA。但是,由于该类在其他地方使用,因此在Storage的定义中将Value设置为ValueA是没有意义的。

我曾试图在Storage的头中创建一个typedef,但我一直遇到编译器错误。从本质上讲,我试图实现的是:

template<typename trait>
typedef Storage<trait, ValueA> MyStorage<trait>;

这样我就可以使用不同的特征,但可以自动设置存储的值。当我尝试这种方法时,我得到的错误是错误:"typedef"的模板声明

在C++03中是否存在这个限制?

最简单的解决方法是简单地使用一个新的类

 template<typename trait> 
 struct DefStorage : Storage<trait,ValueA> 
 {};

从技术上您必须小心,因为这很容易转换为Storage<trait,ValueA>*,如果您delete,则不会调用DefStorage的析构函数,这在技术上是未定义的行为。所以要小心。但是,只要您不进行堆分配,就没有什么可担心的。