我正在一个小组中工作,我必须提供class template
,稍后将其编成其他类,例如:
template <typename type>
class foo{
};
class bar{
foo<bar> a;
};
template
的类型将始终是较高的class
。
class foobar{
foo<foobar> a;
};
是否有任何方法可以自动mtmt // bind,从而使同事不必总是写typename
?
答案 0 :(得分:7)
是否有任何方法可以将其自动mtmt // bind,从而使同事不需要 总是写出类型名?
否
是的,可能带有一些宏。但是你真的不应该。
没事
遵循“代码只写一次,但是却读多次”的口头禅。因此,只需让他们编写template参数即可。带来的不便之处微不足道,以至于其清晰度远远超过了宏的成本。
我也是。实际上,已经完成了将反射引入C ++的工作,应该可以解决此问题(我希望,我实际上不知道当前两个建议中的任何一个是否可行)。
答案 1 :(得分:3)
好吧,您可以添加一个类,作为实际类的基类。
template <typename derivedType>
class foo_holder
{
protected:
foo<derivedType> a;
};
class bar : private foo_holder<bar> { };
如果您在此处使用私有继承,则它主要等效于您的原始代码。
我不确定是否可以将字段设为基类的私有字段,并将其派生为它的朋友。如果是这样,则错误发生的可能性会减少一些(过多地访问细节可能导致不为人知的滥用)。