在C ++中自动选择模板的类型名

时间:2018-08-12 23:25:44

标签: c++ templates

我正在一个小组中工作,我必须提供class template,稍后将其编成其他类,例如:

template <typename type>
class foo{
};

class bar{
    foo<bar> a;
};

template的类型将始终是较高的class

class foobar{
    foo<foobar> a;
};

是否有任何方法可以自动mtmt // bind,从而使同事不必总是写typename

2 个答案:

答案 0 :(得分:7)

  

是否有任何方法可以将其自动mtmt // bind,从而使同事不需要   总是写出类型名?

实际答案

学究的答案

是的,可能带有一些宏。但是你真的不应该。

“那我该怎么办?”

没事

“为什么?”

遵循“代码只写一次,但是却读多次”的口头禅。因此,只需让他们编写template参数即可。带来的不便之处微不足道,以至于其清晰度远远超过了宏的成本。

“好吧,我只是希望有办法”

我也是。实际上,已经完成了将反射引入C ++的工作,应该可以解决此问题(我希望,我实际上不知道当前两个建议中的任何一个是否可行)。

答案 1 :(得分:3)

好吧,您可以添加一个类,作为实际类的基类。

template <typename derivedType>
class foo_holder
{
protected:
    foo<derivedType> a;
};

class bar : private foo_holder<bar> { };

如果您在此处使用私有继承,则它主要等效于您的原始代码。

我不确定是否可以将字段设为基类的私有字段,并将其派生为它的朋友。如果是这样,则错误发生的可能性会减少一些(过多地访问细节可能导致不为人知的滥用)。