我有以下课程:template<typename Trait, Value> class Storage
。在我使用此类的一个应用程序中,我想为Storage
创建一个同义词,即#34;自动填充&#34;在Value
中ValueA
。但是,由于该类在其他地方使用,因此在存储定义中将值设置为ValueA
是没有意义的。
我试图在存储的标头中创建一个typedef,但是我一直遇到编译器错误。基本上我想要完成的是:
template<typename trait>
typedef Storage<trait, ValueA> MyStorage<trait>;
这样我可以使用不同的特征,但是会自动设置存储的值。我尝试这种方法时遇到的错误是错误:&#39; typedef&#39;
的模板声明C ++ 03中是否存在此限制?
答案 0 :(得分:0)
最简单的解决方法是简单地使用新类
template<typename trait>
struct DefStorage : Storage<trait,ValueA>
{};
技术上你必须要小心,因为这很容易转换为Storage<trait,ValueA>*
,如果你delete
,那么DefStorage
的析构函数不会被调用,这是技术上未定义的行为。所以要小心。但只要你没有堆分配这些,就没有什么值得关注的了。