【问题标题】:typedef a templated class with argumentstypedef 带参数的模板类
【发布时间】:2012-11-30 14:30:10
【问题描述】:

为了大型项目的需要,我需要 typedef 一个模板类的对象,用参数实例化。

Foo< A, B, C > FooItem(bar1, bar2);

FooItem 是对象,由bar1bar2 构造。

有没有办法对这个对象进行类型定义(它必须作为类型重新用于另一个模板)?

【问题讨论】:

  • typedef Foo&lt;A, B, C&gt; my_foo;? (术语 nitpick:你不能 typedef 对象)
  • 你不能定义一个对象,只能定义一个类型。 typedef Foo&lt; A, B, C &gt; FooType; FooType FooItem (bar1, bar2);
  • 您可以使用宏,但有什么意义呢? bar1 和 bar2 可能在任何时候都不在范围内,因此它不是一个广泛适用的宏。如果 bar1 和 bar2 是原语,您始终可以将模板子类化并硬编码其中的值。
  • @aleguna 编译器现在告诉我 'FooType FooItem' redeclared as different kind of symbol :/

标签: c++ templates typedef


【解决方案1】:

你不能 typedef objects。你可以 typedef types。 (线索就在名字里!)

对于对象,如果您需要较短的句柄,则需要 references

typedef Foo<A, B, C> FooABC;

FooABC FooItem(bar1, bar2);

auto & f = FooItem;    // 'f' is a FooABC &

auto copy_of_f = f;    // this is a FooABC

【讨论】:

    【解决方案2】:

    新建类怎么样?

    template <typename T1, typename T2, typename T3>
    struct Foo1 : public Foo<T1,T2,T3>
    {
        Foo1()
        : Foo<T1,T2,T3>(bar1, bar2)   //bar1, bar2 - global or static objects?
        {}
    // ......       
    };
    
    Foo1<int, char, double> a;
    //....
    typedef Foo1<A,B,C>  FooItem;
    FooItem b;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-12
      • 1970-01-01
      • 2010-12-01
      • 1970-01-01
      • 2012-11-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多