typedef包含所有默认参数的模板

Ala*_*ing 6 c++ templates default typedef readability

我声明一个模板化的类,所有参数都有默认参数,例如:

template<typename TYPE = int>
class Foo {};
Run Code Online (Sandbox Code Playgroud)

那么以下两个是等价的:

Foo<int> one;
Foo<> two;
Run Code Online (Sandbox Code Playgroud)

但是,我不允许这样做:

Foo three;
Run Code Online (Sandbox Code Playgroud)

是否可以使用typedef相同的名称但没有括号来实现,如下所示:

typedef Foo<> Foo;
Run Code Online (Sandbox Code Playgroud)

Cem*_*ncu 7

我做了类似下面的事情,我不知道你是否愿意:

template<typename TYPE = int>
class basic_Foo {};

typedef basic_Foo<int> Foo;
Run Code Online (Sandbox Code Playgroud)

  • 又名"stdlib方法".:) (4认同)

Ise*_*ria 1

typedef Foo<> Foo;如果允许 声明,则此后Foo不能指定作为模板的名称。即,以下内容无效。

template< template< class > class > struct A {...};
A< Foo > a; // error
Run Code Online (Sandbox Code Playgroud)

虽然上面的typedef做法在实际中是不允许的,但是如果你仍然需要写成Fooas Foo<>,像下面这样的宏就可以达到目的。

#define Foo Foo<>
Run Code Online (Sandbox Code Playgroud)

  • 可能为时已晚,但不要为此目的使用定义。它会在很多方面引起问题。您将永远无法将 foo 与其他类型一起使用。您将永远无法在另一个命名空间中使用 foo 。 (3认同)